JavaScript如何对平行数组重复项去重并按顺序累加对应数值
实现方案
扩展原有去重逻辑的实现
你可以直接基于已写好的去重结果,新增映射表统计每个项的累计值,再按去重顺序生成最终结果:
const array1 = ['car', 'car', 'ball', 'piano', 'car'] const array2 = ['2500', '1000', '400', '2500', '4500'] // 原有去重逻辑 var uniqueValues = []; for(var i in array1){ if(uniqueValues.indexOf(array1[i]) === -1){ uniqueValues.push(array1[i]); } } // 新增累加统计 const sumMap = {} for (let i = 0; i < array1.length; i++) { const key = array1[i] const num = Number(array2[i]) sumMap[key] = (sumMap[key] || 0) + num } // 生成最终结果 const resultArray1 = uniqueValues const resultArray2 = uniqueValues.map(key => String(sumMap[key]))
打印结果验证:resultArray1为 ['car', 'ball', 'piano']resultArray2为 ['8000', '400', '2500']
更高性能的单次遍历实现
无需分开两次遍历数组,一次遍历同时完成去重和累加统计,数组长度较大时效率更高:
const array1 = ['car', 'car', 'ball', 'piano', 'car'] const array2 = ['2500', '1000', '400', '2500', '4500'] const resultArray1 = [] const sumMap = {} for (let i = 0; i < array1.length; i++) { const key = array1[i] const num = Number(array2[i]) // 首次出现时加入去重数组 if (!sumMap.hasOwnProperty(key)) { resultArray1.push(key) sumMap[key] = 0 } sumMap[key] += num } const resultArray2 = resultArray1.map(key => String(sumMap[key]))
内容的提问来源于stack exchange,提问作者NewProgrammer
相关产品推荐
相关产品推荐

