首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果属性与数组中的值匹配,则筛选对象

如果属性与数组中的值匹配,则筛选对象
EN

Stack Overflow用户
提问于 2018-12-05 16:02:45
回答 6查看 90关注 0票数 1

我有一个对象,看起来像这样:

代码语言:javascript
复制
const faultGroup = 
[{
  comments:"",
  faults:
   [{
     id:31,
     name: "speaker"
    },
    {
     id:22
     name: "earphones"
    },
    {
     id:25
     name: "keyboard"
    }];
}];

并且我有一个包含id数组的数组。

代码语言:javascript
复制
idArray = [25,22];

预期结果:

代码语言:javascript
复制
result = ["earphones", "keyboard"];

当前解决方案:

代码语言:javascript
复制
result = [];
faultGroup.map(fg => {
  if (!!fg.faults) {
     fg.faults.forEach(fault => {
         for (let i = 0; i < idArray.length; i++) {
            if (idArray[i] === fault.id) {
                this.result.push(fault.name);
            }
         }
     });
   }
});

我可以知道做这件事最有效的方法吗?(不确定在这种情况下如何使用filter和includes方法)目前我使用map和double for循环的组合。感谢您的帮助!

EN

回答 6

Stack Overflow用户

发布于 2018-12-05 16:06:19

您可以对faultGroup数组执行reduce操作,从每个项目中提取faults数组并对其进行迭代,如果id包含在idArray中,则将其推送到累加器

代码语言:javascript
复制
const faultGroup = [{
  comments: "",
  faults: [{
      id: 31,
      name: "speaker"
    },
    {
      id: 22,
      name: "earphones"
    },
    {
      id: 25,
      name: "keyboard"
    }
  ]
}];
const idArray = [25,22];
const result = faultGroup.reduce((a, { faults }) => {
  if (faults) faults.forEach(({ id, name }) => {
    if (idArray.includes(id)) a.push(name);
  });
  return a;
}, []);
console.log(result);

票数 3
EN

Stack Overflow用户

发布于 2018-12-05 16:09:42

这也是可行的。

代码语言:javascript
复制
let result = [];

faultGroup.forEach(({ faults }) => {
  faults
    .filter(({ id }) => idArray.indexOf(id) > -1)
    .forEach(fault => result.push(fault));
});
票数 1
EN

Stack Overflow用户

发布于 2018-12-05 16:09:47

对于可能即将到来的Array#flatMap,您可以通过获取所需的项目,在单个循环中使用具有展平的映射。

代码语言:javascript
复制
const
    faultGroup = [{ comments: "", faults: [{ id: 31, name: "speaker" }, { id: 22, name: "earphones" }, { id: 25, name: "keyboard" }] }],
    idArray = [25, 22],
    result = faultGroup.flatMap(({ faults }) => faults
        .filter(({ id }) => idArray.includes(id))
        .map(({ name }) => name)
    );
  
console.log(result);

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

https://stackoverflow.com/questions/53627691

复制
相关文章

相似问题

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