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

Node.js中如何合并同productID数据,将productImage转为数组

在Node.js中合并相同productID的对象并合并productImage数组

刚好之前处理过类似的需求,给你分享两种实用的实现方法,都能完美解决你要合并相同productID对象、把对应productImage合并成数组的需求:

方法一:使用Array.reduce()

这是最常用的方案,通过一次遍历就能完成合并,效率很高,适合处理大数据量:

var data = [
 { "productID":18, "productTitle":"Watch", "productImage":"1588148225540.jpg" },
 { "productID":18, "productTitle":"Watch", "productImage":"15881482433232.jpg" },
 { "productID":19, "productTitle":"Shirt", "productImage":"1588148214343.jpg" }
];

const mergedData = Object.values(data.reduce((acc, item) => {
  // 用productID作为唯一标识的键
  const key = item.productID;
  
  if (!acc[key]) {
    // 如果累加器里还没有这个ID的条目,创建新对象并将productImage转为数组
    acc[key] = {
      ...item,
      productImage: [item.productImage]
    };
  } else {
    // 如果已有该ID的条目,把当前的productImage推到数组中
    acc[key].productImage.push(item.productImage);
  }
  
  return acc;
}, {}));

console.log(mergedData);

逻辑说明:

  • 用reduce遍历原数组,以productID作为临时对象的键,确保每个ID只存一条数据
  • 首次遇到某个productID时,复制该对象的所有字段,并把productImage包装成数组
  • 后续遇到相同productID时,直接把新的productImage追加到已有数组中
  • 最后用Object.values()把临时对象的value提取出来,得到你想要的数组格式

方法二:使用ES6 Map对象

如果你更喜欢更直观的键值对操作,用Map也是个不错的选择:

var data = [
 { "productID":18, "productTitle":"Watch", "productImage":"1588148225540.jpg" },
 { "productID":18, "productTitle":"Watch", "productImage":"15881482433232.jpg" },
 { "productID":19, "productTitle":"Shirt", "productImage":"1588148214343.jpg" }
];

const productMap = new Map();

data.forEach(item => {
  const existingItem = productMap.get(item.productID);
  
  if (existingItem) {
    // 已有该ID的条目,追加图片
    existingItem.productImage.push(item.productImage);
  } else {
    // 首次出现,存入Map并把图片转为数组
    productMap.set(item.productID, {
      ...item,
      productImage: [item.productImage]
    });
  }
});

// 把Map的值转为数组
const mergedData = Array.from(productMap.values());

console.log(mergedData);

补充说明:

这两种方法都默认相同productID的其他字段(比如productTitle)完全一致,如果你的实际数据存在同ID但其他字段不同的情况,需要额外添加逻辑处理(比如保留第一个出现的值、做字段合并等),不过从你的示例数据来看,这个前提是成立的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:12:37