如何合并数组中name和expenseType相同的对象并累加amount值
实现思路
- 构造一个临时对象作为缓存,以
name + '|' + expenseType作为唯一键(用分隔符避免两个字段直接拼接产生内容冲突) - 遍历原数组的每一项,匹配缓存中是否存在对应键的记录:
- 存在:直接累加对应
amount值 - 不存在:将当前对象拷贝后存入缓存
- 存在:直接累加对应
- 最终把缓存对象的所有值提取为数组,即可得到目标结果
完整实现代码
let arrPeople = [ {name: "Jack", expenseType: "food", amount: 50}, {name: "Kate", expenseType: "food", amount: 60}, {name: "Rob", expenseType: "transportation", amount: 15}, {name: "Jack", expenseType: "food", amount: 40}, {name: "Kate", expenseType: "transportation", amount: 20}, {name: "Jack", expenseType: "miscellaneous", amount: 30}, {name: "Rob", expenseType: "transportation", amount: 15} ] const cache = {} arrPeople.forEach(item => { // 生成唯一匹配键 const uniqueKey = `${item.name}|${item.expenseType}` if (cache[uniqueKey]) { cache[uniqueKey].amount += item.amount } else { // 拷贝对象存入缓存,避免修改原数组内容 cache[uniqueKey] = {...item} } }) const newArr = Object.values(cache) console.log(newArr)
结果验证
运行代码后得到的newArr和你给出的预期输出完全一致,且对象顺序和原数组中首次出现的顺序保持匹配。
内容的提问来源于stack exchange,提问作者Kenny Punay
相关产品推荐
相关产品推荐

