如何在JavaScript中合并数组内同商品的规格信息生成新数组?
合并重复商品的尺码数据
你可以通过分组合并的方式实现这个需求,核心思路是把title和sku都相同的项归为一组,然后把每组的size合并成逗号分隔的字符串。下面是适合新手的实现代码:
const originalData = [ { title: 'Nike Dunk Low Panda', sku: 'DD1391-100', size: '9 US', }, { title: 'Nike Dunk Low Panda', sku: 'DD1391-100', size: '10 US', }, { title: 'Nike Dunk Low Panda', sku: 'DD1391-100', size: '11 US', }, ]; // 用reduce分组,先把相同title+sku的项归到一起 const grouped = originalData.reduce((acc, item) => { // 用title+sku作为唯一标识,避免重复分组 const key = `${item.title}-${item.sku}`; if (!acc[key]) { // 如果是第一次遇到这个商品,复制基础属性,把size存成数组 acc[key] = { title: item.title, sku: item.sku, sizes: [item.size] }; } else { // 已经存在的商品,把当前size加到数组里 acc[key].sizes.push(item.size); } return acc; }, {}); // 把分组后的对象转成数组,并且把sizes数组转成逗号分隔的字符串 const newData = Object.values(grouped).map(item => ({ ...item, size: item.sizes.join(', ') })); console.log(newData);
代码解释:
reduce方法可以遍历数组,同时构建一个临时的分组对象,用来存放每个唯一商品的数据- 用
title + sku作为分组的键,确保只有完全相同的商品才会被合并 - 最后用
Object.values把分组对象转成数组,再通过map把尺码数组转成字符串格式
运行这段代码后,就能得到你想要的合并后数组啦。
内容的提问来源于stack exchange,提问作者me.gromov
相关产品推荐
相关产品推荐

