数组过滤问题:按第一个数组元素筛选并聚合Done值
解决方案
首先注意你的数组语法存在问题,JavaScript中对象需要用{}包裹,字符串需要加引号,修正后的数组应该是:
const firstArray = ['eva', 'ema', 'ela']; const secondArray = [ {Name: 'eva', Done: 2}, {Name: 'ela', Done: 5}, {Name: 'ema', Done: 3}, {Name: 'ela', Done: 1}, {Name: 'ema', Done: 0}, {Name: 'eva', Done: 4}, {Name: 'ela', Done: 6}, {Name: 'ema', Done: 8}, {Name: 'eva', Done: 7}, {Name: 'ela', Done: 9} ];
你可以使用Array.map()遍历firstArray,结合Array.filter()和Array.map()来完成需求:
const result = firstArray.map(name => { // 筛选出当前名字对应的所有项 const matchedItems = secondArray.filter(item => item.Name === name); // 提取Done值组成数组 const doneValues = matchedItems.map(item => item.Done); // 返回目标格式的对象 return { name: name, Done: doneValues }; }); console.log(result);
输出结果符合你的需求:
[ { name: 'eva', Done: [2, 4, 7] }, { name: 'ema', Done: [3, 0, 8] }, { name: 'ela', Done: [5, 1, 9] } ]
你的原有代码存在的问题:
- 语法错误:缺少闭合的
},导致代码无法执行 - 使用
var声明变量n,会存在函数作用域提升问题,建议改用let或const - 仅完成了筛选步骤,但没有提取
Done值,也没有将结果收集到最终数组中
内容的提问来源于stack exchange,提问作者Syafika Aharan
相关产品推荐
相关产品推荐

