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

Javascript 如果属性与数组中的值匹配,则筛选对象,javascript,arrays,object,angular6,Javascript,Arrays,Object,Angular6,我有一个像这样的对象: const faultGroup = [{ comments:"", faults: [{ id:31, name: "speaker" }, { id:22 name: "earphones" }, { id:25 name: "keyboard" }]; }]; 我有一个数组,它包含一个id数组 idArray = [25,22]; 预期结果: re

我有一个像这样的对象:

const faultGroup = 
[{
  comments:"",
  faults:
   [{
     id:31,
     name: "speaker"
    },
    {
     id:22
     name: "earphones"
    },
    {
     id:25
     name: "keyboard"
    }];
}];
我有一个数组,它包含一个id数组

idArray = [25,22];
预期结果:

result = ["earphones", "keyboard"];
当前解决方案:

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);
            }
         }
     });
   }
});
result=[];
faultGroup.map(fg=>{
如果(!!fg.故障){
fg.faults.forEach(故障=>{
for(设i=0;i

我能知道做这件事最有效的方法吗?(不确定如何使用filter和includes方法)目前我正在使用map和double for循环的组合。谢谢你的帮助

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

const faultGroup=[{
评论:“,
缺点:[{
身份证号码:31,
姓名:“发言者”
},
{
身份证号码:22,
名称:“耳机”
},
{
身份证号码:25,
名称:“键盘”
}
]
}];
常数=[25,22];
const result=faultGroup.reduce((a,{faults})=>{
if(faults)faults.forEach({id,name})=>{
如果(idArray.includes(id))a.push(name);
});
返回a;
}, []);

控制台日志(结果)
您可以
reduce
遍历
faultGroup
数组,从每个项目中提取
faults
数组并对其进行迭代,如果
id
包含在
idArray
中,则推送到累加器:

const faultGroup=[{
评论:“,
缺点:[{
身份证号码:31,
姓名:“发言者”
},
{
身份证号码:22,
名称:“耳机”
},
{
身份证号码:25,
名称:“键盘”
}
]
}];
常数=[25,22];
const result=faultGroup.reduce((a,{faults})=>{
if(faults)faults.forEach({id,name})=>{
如果(idArray.includes(id))a.push(name);
});
返回a;
}, []);
控制台日志(结果)这同样有效

let result = [];

faultGroup.forEach(({ faults }) => {
  faults
    .filter(({ id }) => idArray.indexOf(id) > -1)
    .forEach(fault => result.push(fault));
});
这同样有效

let result = [];

faultGroup.forEach(({ faults }) => {
  faults
    .filter(({ id }) => idArray.indexOf(id) > -1)
    .forEach(fault => result.push(fault));
});
在可能的情况下,您可以通过获取想要的项目,在单个循环中使用具有展平的映射

const
faultGroup=[{comments:,faults:[{id:31,name:“speaker”},{id:22,name:“earphones”},{id:25,name:“keyboard”}],
idArray=[25,22],
结果=faultGroup.flatMap(({faults})=>faults
.filter(({id})=>idArray.includes(id))
.map(({name})=>name)
);
控制台日志(结果)在可能的情况下,您可以通过获取想要的项目,在单个循环中使用具有平坦化的映射

const
faultGroup=[{comments:,faults:[{id:31,name:“speaker”},{id:22,name:“earphones”},{id:25,name:“keyboard”}],
idArray=[25,22],
结果=faultGroup.flatMap(({faults})=>faults
.filter(({id})=>idArray.includes(id))
.map(({name})=>name)
);
控制台日志(结果)
var faultGroup=
[{
评论:“,
缺点:
[{
身份证号码:31,
姓名:“发言者”
},
{
身份证号码:22,
名称:“耳机”
},
{
身份证号码:25,
名称:“键盘”
}]
}];
idArray=[25,22];
var res=faultGroup.map(f=>f[“faults”].filter(a=>idArray.indexOf(a.id)>-1.map(r=>r.name));
控制台日志(res)
var faultGroup=
[{
评论:“,
缺点:
[{
身份证号码:31,
姓名:“发言者”
},
{
身份证号码:22,
名称:“耳机”
},
{
身份证号码:25,
名称:“键盘”
}]
}];
idArray=[25,22];
var res=faultGroup.map(f=>f[“faults”].filter(a=>idArray.indexOf(a.id)>-1.map(r=>r.name));
控制台日志(res)您可以使用和来获得结果:

const data=[{comments:,faults:[{id:31,name:“speaker”},{id:22,name:“eapphones”},{id:25,name:“keyboard”}]
常量ID=[25,22];
const result=data.reduce((r,{faults})=>
[…r,…faults.filter(({id})=>ids.includes(id)).map(x=>x.name)],[])
console.log(result)
您可以使用和来获得结果:

const data=[{comments:,faults:[{id:31,name:“speaker”},{id:22,name:“eapphones”},{id:25,name:“keyboard”}]
常量ID=[25,22];
const result=data.reduce((r,{faults})=>
[…r,…faults.filter(({id})=>ids.includes(id)).map(x=>x.name)],[])

console.log(result)
JSON.parse
JSON.stringify
可用于检查所有键值对:

var result=[],idArray=[25,22],faultGroup=[{comments:],faults:[
{id:31,姓名:“扬声器”},{id:22,姓名:“耳机”},{id:25,姓名:“键盘”}]};
stringify(faultGroup,(k,v)=>idArray.includes(v.id)?result.push(v.name):v;

控制台日志(结果)
JSON.parse
JSON.stringify
可用于检查所有键值对:

var result=[],idArray=[25,22],faultGroup=[{comments:],faults:[
{id:31,姓名:“扬声器”},{id:22,姓名:“耳机”},{id:25,姓名:“键盘”}]};
stringify(faultGroup,(k,v)=>idArray.includes(v.id)?result.push(v.name):v;
控制台日志(结果)