我有一个对象,看起来像这样:
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);
}
}
});
}
});我可以知道做这件事最有效的方法吗?(不确定在这种情况下如何使用filter和includes方法)目前我使用map和double for循环的组合。感谢您的帮助!
发布于 2018-12-05 16:06:19
您可以对faultGroup数组执行reduce操作,从每个项目中提取faults数组并对其进行迭代,如果id包含在idArray中,则将其推送到累加器
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);
发布于 2018-12-05 16:09:42
这也是可行的。
let result = [];
faultGroup.forEach(({ faults }) => {
faults
.filter(({ id }) => idArray.indexOf(id) > -1)
.forEach(fault => result.push(fault));
});发布于 2018-12-05 16:09:47
对于可能即将到来的Array#flatMap,您可以通过获取所需的项目,在单个循环中使用具有展平的映射。
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);
https://stackoverflow.com/questions/53627691
复制相似问题