如何按两个属性对对象数组分组并合并price数组
按两个属性分组并合并对象数组的解决方案
可以通过临时映射对象的方式实现,核心思路是用index与name的组合值作为唯一标识,将相同标识的对象的price数组合并,最终提取映射对象的值得到目标数组。
实现代码
const originalArray = [ { index: 4, name: "car", price: [10,20,30] }, { index: 4, name: "car", price: [40,50,60] }, { index: 3, name: "bike", price: [40,50,60] }, { index: 2, name: "scooter", price: [10,20,60] }, { index: 2, name: "scooter", price: [70] } ]; const groupMap = {}; originalArray.forEach(item => { // 生成唯一分组键,确保index和name都相同时归为一组 const key = `${item.index}-${item.name}`; if (!groupMap[key]) { // 首次遇到该分组时,初始化对象(展开原对象避免引用关联) groupMap[key] = { ...item, price: [...item.price] }; } else { // 已有分组时,合并price数组(顺序可根据需求调整) groupMap[key].price = [...item.price, ...groupMap[key].price]; } }); // 将映射对象的所有值转为数组,得到最终结果 const resultArray = Object.values(groupMap); console.log(resultArray);
说明
- 分组键采用
index-name的拼接形式,确保只有当两个属性完全相同时才会被归为同一组 - 使用扩展运算符
...复制对象和数组,避免后续操作修改原数据 - 合并
price数组的顺序可按需调整:如果需要保留原数组的先后顺序,改为[...groupMap[key].price, ...item.price]即可
内容的提问来源于stack exchange,提问作者Elder
相关产品推荐
相关产品推荐

