首页 > 解决方案 > 如果重复,如何比较二维数组中的相邻元素?

问题描述

我有一个二维数组:

var arr1 = [["Egypt","Grid",50],["Egypt","Grid",10],["Nigeria","Grid",20],["Ghana","Grid",60],["Egypt","Grid",30]]

我想检查每个数组的第一个元素,例如埃及、尼日利亚和加纳,看看它们是否重复。但我只希望它检查下一个元素,而不是检查数组中的所有元素。如果一个或多个元素彼此相邻重复,我想返回一个数组,将位置 2 (50,10,20,60,30) 的元素相加

这应该导致:

var arr2 = [["Egypt","Grid",60],["Nigeria","Grid",20],["Ghana","Grid",60]],["Egypt","Grid",30]]

请注意,即使有 3 个带有“Egypt”的数组,它也只会组合它们彼此相邻的位置。

我都试过了mapfor loop但没有任何接近工作的东西。这就是我开始的:

arr1.map(function (unit, index, array) {
var length = array.length
if (index < length - 2) {
  var next = array[index + 1][0]
  if (unit[0] === next) {
    }
  }
})

这可以检查元素是否重复。我想我接下来需要将重复项放入一个单独的数组中,然后我可以reduce但不知道该怎么做。任何能帮助我指出正确方向的帮助都会很棒。谢谢!

标签: javascriptarraysdictionary

解决方案


您可以使用一个简单的for循环迭代除最后一个数组之外的每个数组,并检查当前迭代元素的第一个元素是否与 current+1 的第一个元素匹配。

如果它们匹配,则将每个元素的第三个元素相加并分配给当前迭代数组,删除current+1(此处使用splice())并递减i以再次重新检查相同的索引。

var arr1 = [
  ['Egypt', 'Grid', 50],
  ['Egypt', 'Grid', 10],
  ['Nigeria', 'Grid', 20],
  ['Ghana', 'Grid', 60],
  ['Egypt', 'Grid', 30],
];

for (let i = 0; i < arr1.length - 1; i++) {
  if (arr1[i][0] === arr1[i + 1][0]) {
    arr1[i][2] = arr1[i][2] + arr1[i + 1][2];
    arr1.splice(i + 1, 1);
    i--;
  }
}

console.log(arr1);


推荐阅读