You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套对象数组合并为单一数组?使用.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:01:07