如何将嵌套对象数组合并为单一数组?使用.reduce()未成功
合并嵌套对象数组并过滤null值
原始输入数据
[ [ { jobId: 1, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 2, acceptableRate: 80 }, { jobId: 3, requiredNumber: 3, acceptableRate: 80 }, { jobId: 4, requiredNumber: 1, acceptableRate: 80 } ], [ { jobId: 2, requiredNumber: 1, acceptableRate: 95 } ], null ]
尝试情况与问题
使用reduce()方法合并时未成功,得到的输出是多个独立数组和null值:
[ { jobId: 1, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 2, acceptableRate: 80 }, { jobId: 3, requiredNumber: 3, acceptableRate: 80 }, { jobId: 4, requiredNumber: 1, acceptableRate: 80 } ] [ { jobId: 2, requiredNumber: 1, acceptableRate: 95 } ] null
期望输出
希望得到一个包含所有有效对象的单一数组:
[ { jobId: 1, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 2, acceptableRate: 80 }, { jobId: 3, requiredNumber: 3, acceptableRate: 80 }, { jobId: 4, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 1, acceptableRate: 95 } ]
正确实现方法
方法1:改进reduce()逻辑
之前的reduce()未处理null值且合并方式错误,调整后代码如下:
const input = [ [ { jobId: 1, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 2, acceptableRate: 80 }, { jobId: 3, requiredNumber: 3, acceptableRate: 80 }, { jobId: 4, requiredNumber: 1, acceptableRate: 80 } ], [ { jobId: 2, requiredNumber: 1, acceptableRate: 95 } ], null ]; const result = input.reduce((acc, current) => { // 跳过null元素 if (current) { // 将当前子数组的所有元素推入累加器 acc.push(...current); } return acc; }, []); console.log(result);
方法2:用flat() + 过滤null
先过滤掉null,再用flat()展开嵌套数组,简洁高效:
const input = [ [ { jobId: 1, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 2, acceptableRate: 80 }, { jobId: 3, requiredNumber: 3, acceptableRate: 80 }, { jobId: 4, requiredNumber: 1, acceptableRate: 80 } ], [ { jobId: 2, requiredNumber: 1, acceptableRate: 95 } ], null ]; const result = input.filter(item => item !== null).flat(); console.log(result);
方法3:用concat() + 扩展运算符
过滤null后,通过扩展运算符把所有子数组传给concat()完成合并:
const input = [ [ { jobId: 1, requiredNumber: 1, acceptableRate: 80 }, { jobId: 2, requiredNumber: 2, acceptableRate: 80 }, { jobId: 3, requiredNumber: 3, acceptableRate: 80 }, { jobId: 4, requiredNumber: 1, acceptableRate: 80 } ], [ { jobId: 2, requiredNumber: 1, acceptableRate: 95 } ], null ]; const result = [].concat(...input.filter(item => item !== null)); console.log(result);
内容的提问来源于stack exchange,提问作者Mohamed Essam
相关产品推荐
相关产品推荐

