javascript - 如果重复,如何比较二维数组中的相邻元素?
问题描述
我有一个二维数组:
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”的数组,它也只会组合它们彼此相邻的位置。
我都试过了map
,for 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
但不知道该怎么做。任何能帮助我指出正确方向的帮助都会很棒。谢谢!
解决方案
您可以使用一个简单的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);
推荐阅读
- c# - HtmlAgilityPack - 删除所有属性
- mysql - Leetcode 数据库 584. COALESCE(referee_id,0) 含义
- heroku - 使用来自 name.com 的自定义域和 heroku
- java - 为学校项目创建作业列表,但我收到 NullPointerException
- delphi - 德尔福。文件写入,错误 - E2036 需要变量
- c# - oData EndPoint:是否影响 SQL 查询?
- python - 在 ubuntu 18.04 中更改 python 的默认版本
- javascript - 查找属性为小数的具有最大值的对象属性
- qt - 如何动态绘制多边形并使其点/标记在 QML 中可移动?
- c++ - 我应该使用 std::optional 还是继承添加可选的类成员?