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

如何高效重组含相同products键的JavaScript对象数组?

最简单高效的数组重组方案

嘿,这个需求其实很好实现,给你几个简洁又高效的方法,你可以根据场景选:

方法一:用flatMap快速合并(最简洁)

这个方法一步到位,先把所有对象里的products数组提取出来并合并,再包装成目标结构:

// 假设你的原数组叫originalArray
const mergedProducts = originalArray.flatMap(item => item.products);
const targetArray = [{ products: mergedProducts }];

flatMap会遍历原数组的每个元素,把每个元素的products数组“展开”后收集到一个新数组里,最后我们只需要把这个合并后的数组放到一个新对象里,再套进数组就搞定了。

方法二:用reduce累加合并(更灵活)

如果之后需要扩展逻辑(比如过滤某些products),用reduce会更灵活:

const targetArray = [
  originalArray.reduce((result, currentItem) => {
    // 把当前item的products合并到结果的products里
    result.products.push(...currentItem.products);
    return result;
  }, { products: [] }) // 初始值是一个空products的对象
];

reduce从一个空的products对象开始,逐个把每个元素的products追加进去,最后返回的就是合并后的单个对象,再放进数组就是你要的结构。

如果你想直接修改原数组(不创建新数组)

要是不想生成新数组,想直接改原数组的话,可以这么做:

// 把后面所有元素的products合并到第一个元素里
originalArray[0].products.push(
  ...originalArray.slice(1).flatMap(item => item.products)
);
// 移除第一个元素之后的所有元素
originalArray.splice(1);

这样原数组就直接变成你要的目标结构了。

至于你说的unshift()没成功,应该是因为unshift()是用来往数组开头添加元素的,而你需要的是合并数组元素内部的products数组,不是调整数组元素的位置,所以用它就不对啦。

内容的提问来源于stack exchange,提问作者IWI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:59:26