JavaScript对比两个对象数组 更新匹配对象及Total总计数
实现方案
原代码存在3个核心问题:
- 遍历
arr2做map返回的结果长度和arr2一致,会丢失arr1中的Total项 Array.filter的回调需要返回布尔值判断元素是否保留,原代码在回调里写三元返回对象、数值,不符合API用法- 没有实现Total项的总计数累加逻辑,也没有保留原数组项的
text字段
可以按下面的逻辑实现:
- 先把
arr2转成状态对应计数的映射表,提升匹配效率 - 提前累加
arr2所有项的count得到总计数 - 遍历原数组
arr1,Total项直接赋值总计数,其余项匹配映射表中的count更新即可
完整代码:
// 生成status到count的快速查找映射 const statusCountMap = new Map(arr2.map(i => [i.status, i.count])) // 计算所有非Total项的计数总和 const total = arr2.reduce((acc, cur) => acc + cur.count, 0) const finalResult = arr1.map(item => { if (item.status === 'Total') { return { ...item, count: total } } return { ...item, count: statusCountMap.get(item.status) ?? item.count } })
运行后得到的结果和预期完全一致:
[ {status: 'Total', count: 30, text: 'Total applications'}, {status: 'submitted', count: 20, text: 'Applications submitted'}, {status: 'Rejected', count: 10, text: 'Applications rejected'} ]
如果后续arr2里存在arr1没有的status项,也可以根据业务需求在遍历完arr1后追加对应项即可,当前逻辑完全覆盖题目给出的场景。
内容的提问来源于stack exchange,提问作者Asif Kaif
相关产品推荐
相关产品推荐

