如何检测二维数组相邻元素重复并合并累加对应位置数值
二维数组相邻重复项合并方案
实现思路
- 先做边界判断:如果输入数组长度≤1,直接返回原数组即可,无需合并操作
- 初始化结果数组,默认放入原数组的第一个元素作为比对基准
- 从原数组下标1的位置开始遍历所有子数组:
- 取出当前子数组的第一个元素,和结果数组末尾子数组的第一个元素做比对
- 若两者相同:将当前子数组下标为2的数值,累加到结果数组末尾子数组的下标2位置
- 若两者不同:直接将当前子数组推入结果数组即可
该方案仅需要单次遍历数组即可完成处理,时间复杂度为O(n),不需要额外维护重复项临时数组再做reduce累加,逻辑更简洁。
代码实现
function mergeAdjacentDuplicate(arr) { // 边界处理 if (arr.length <= 1) return [...arr] const result = [[...arr[0]]] for (let i = 1; i < arr.length; i++) { const current = arr[i] const lastInResult = result[result.length - 1] if (current[0] === lastInResult[0]) { // 相邻第一项相同,累加第三项数值 lastInResult[2] += current[2] } else { // 不相同直接推入新元素 result.push([...current]) } } return result } // 测试验证 var arr1 = [["Egypt","Grid",50],["Egypt","Grid",10],["Nigeria","Grid",20],["Ghana","Grid",60],["Egypt","Grid",30]] var arr2 = mergeAdjacentDuplicate(arr1) console.log(arr2) // 输出结果和预期一致:[["Egypt","Grid",60],["Nigeria","Grid",20],["Ghana","Grid",60],["Egypt","Grid",30]]
内容的提问来源于stack exchange,提问作者Ajay Ubhi
相关产品推荐
相关产品推荐

