首页 > 解决方案 > 如何找到数组中第一个重复项的索引?

问题描述

我需要找到数组中第一个重复数字的索引,并将其分配给仅使用 for 循环的空变量

提前致谢

我尝试了许多逻辑运算符。

var findIndex;
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 0

var arrWithNumbers = [3, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 1


var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
for (var i = 0; i < arrWithNumbers.length; i++) {
  if (arrWithNumbers[i] === i) {
    firstIndex = arrWithNumbers.indexOf(i);
    break;
  }
}
console.log(firstIndex);

我的期望:

var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 0

var arrWithNumbers = [3, 4, 5, 2, 6, 5, 1, 2, 4, 8]; //-----> it should give result console.log(findIndex) // 1

//what i have
var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
for (var i = 0; i < arrWithNumbers.length; i++) {
  if (arrWithNumbers[i] === i) {
    firstIndex = arrWithNumbers.indexOf(i);
    break;
  }
}
console.log(firstIndex); // 2

标签: javascriptarrays

解决方案


您拥有的一种选择是拥有一个包含所有数字计数的变量,您可以使用reduce

var arrWithNumbers = [2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;
var numberCount = arrWithNumbers.reduce((c, v) => (c[v] = (c[v] || 0) + 1, c), {});


for (var i = 0; i < arrWithNumbers.length; i++) {
  if (numberCount[arrWithNumbers[i]] > 1) {
    firstIndex = i;
    break;
  }
}

console.log(firstIndex);


另一种选择是使用lastIndexOf. 如果当前索引与该lastIndexOf值不同,则意味着它有重复并中断循环。

var arrWithNumbers = [3, 2, 4, 5, 2, 6, 5, 1, 2, 4, 8];
var firstIndex = null;

for (var i = 0; i < arrWithNumbers.length; i++) {
  if (i !== arrWithNumbers.lastIndexOf(arrWithNumbers[i])) {
    firstIndex = i;
    break;
  }
}

console.log(firstIndex);


推荐阅读