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;
控制台日志(结果)代码>