如何合并x、y值相同的数组对象并累加对应g值,重新生成有序key
你之前使用Set的方案之所以失效,是因为你将整个对象序列化后去重,原数组所有对象的key、g属性均不相同,序列化结果全部唯一,无法实现按x、y分组的效果,同时Set本身也不支持属性累加的逻辑。
实现代码
let input = [ { key: 0, x: 0, y: 0, g: 1 }, { key: 1, x: 0, y: 0, g: 2 }, { key: 2, x: 2, y: 0, g: 3 }, { key: 3, x: 0, y: 0, g: 3 }, { key: 4, x: 2, y: 2, g: 1 }, { key: 5, x: 2, y: 2, g: 2 }, ]; const groupMap = new Map(); input.forEach(item => { // 生成x、y组合的唯一分组标识 const groupKey = `${item.x},${item.y}`; if (groupMap.has(groupKey)) { // 同分组累加g值 groupMap.get(groupKey).g += item.g; } else { // 新增分组 groupMap.set(groupKey, { x: item.x, y: item.y, g: item.g }); } }); // 转数组并重新分配顺序key const result = Array.from(groupMap.values()).map((item, index) => ({ key: index, ...item })); console.log(result);
运行输出
[ { key: 0, x: 0, y: 0, g: 6 }, { key: 1, x: 2, y: 0, g: 3 }, { key: 2, x: 2, y: 2, g: 3 } ]
你给出的预期结果中第三条的x、y值为笔误,上述为正确运行结果。如果x、y值包含逗号这类特殊字符,可将分组key替换为JSON.stringify([item.x, item.y])避免分组冲突。
内容的提问来源于stack exchange,提问作者Axxb 2020
相关产品推荐
相关产品推荐

