首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:如何在两个数组对象之间使用映射和筛选

Javascript:如何在两个数组对象之间使用映射和筛选
EN

Stack Overflow用户
提问于 2022-04-06 05:33:34
回答 3查看 73关注 0票数 0

在使用.map.filter时,我遇到了一些问题,无法获得两个对象中不相似的对象。要从arrayObjTwo中获取不寻常的对象,我需要做哪些更改。

代码语言:javascript
复制
const arrayObjOne = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arrayObjTwo =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const object1Names = arrayObjOne.map(obj => obj.Name); // for caching the result
const results = arrayObjTwo.filter(name => !object1Names.includes(name));
console.log(results);

一个编译器代码:https://onecompiler.com/javascript/3xy92hpmp

预期结果:

代码语言:javascript
复制
const arrayObjTwo =[
        { description: "Frontyard of home", spaceName: "Frontyard" }
    ]

谢谢..

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-06 05:38:33

您对结果的筛选是错误的。您应该使用"object.spaceName“,而不是仅仅使用”名称“,因为您正在遍历对象数组而不仅仅是字符串

代码语言:javascript
复制
// So this line:
const results = arrayObjTwo.filter(name => !object1Names.includes(name));

// Should be:
const results = arrayObjTwo.filter(object => !object1Names.includes(object.spaceName));

// And you have a typo:
const object1Names = arrayObjOne.map(obj => obj.Name);

// Should be like so as keys and properties are case-sensitive:
const object1Names = arrayObjOne.map(obj => obj.name);

因此,这一切都应该是:

代码语言:javascript
复制
const arrayObjOne = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arrayObjTwo =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const object1Names = arrayObjOne.map(obj => obj.name); // for caching the result
const results = arrayObjTwo.filter(object => !object1Names.includes(object.spaceName));
console.log(results);
票数 1
EN

Stack Overflow用户

发布于 2022-04-06 05:45:15

你快到了!

您的map-语句中有大写名称,但是javascript区分大小写,所以您查找的“名称”字段不存在,因此您的"object1Names“返回未定义的字段。

你应该查一下obj.name

您还需要将其与arrayObjTwo的"spaceName"-field,而不是整个对象进行比较。

下面是您进行这些小更改的代码:

代码语言:javascript
复制
const arrayObjOne = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arrayObjTwo =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const object1Names = arrayObjOne.map(obj => obj.name); // for caching the result
const results = arrayObjTwo.filter(obj => !object1Names.includes(obj.spaceName));
console.log(results);
票数 1
EN

Stack Overflow用户

发布于 2022-04-06 05:41:28

你需要这个吗?

代码语言:javascript
复制
const arr1 = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arr2 =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const names = arr1.map(item => item.name); // for caching the result
console.log(names);
const res = arr2.filter(item => !names.includes(item.name));
console.log(res);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71761493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档