javascript - 在一个Javascript数组中,找到第一个重复编号

我需要找到前两个数字并显示如下所示的索引:


var arrWithNumbers = [2,5,5,2,3,5,1,2,4];



所以第一个重复的数字是 2,所以变量 firstIndex 应该有值 0. 我必须使用循环。


var numbers = [7, 5, 7, 6, 6, 4, 9, 10, 2, 11];


var firstIndex



for (i = numbers[0]; i <= numbers.length; i++) {


 firstIndex = numbers[0]


 if (numbers[i] == firstIndex) {


 console.log(firstIndex);


 break;


 }


}
时间:

你可以使用 Array#indexOf 方法和 fromIndex 参数 。


var numbers = [7, 5, 7, 6, 6, 4, 9, 10, 2, 11];



//iterate upto the element just before the last


for (var i = 0; i <numbers.length - 1; i++) {


//check the index of next element


 if (numbers.indexOf(numbers[i], i + 1)> -1) {


//if element present log data and break the loop


 console.log("index:", i,"value:", numbers[i]);


 break;


 }


}

更新:使用一个对象来引用元素的索引它会更好。


var numbers = [7, 5, 7, 6, 6, 4, 9, 10, 2, 11],


 ref = {};



//iterate over the array


for (var i = 0; i <numbers.length; i++) {


//check value already defined or not


 if (numbers[i] in ref) {


//if defined then log data and brek loop


 console.log("index:", ref[numbers[i]],"value:", numbers[i]);


 break;


 }


//define the reference of the index


 ref[numbers[i]] = i;


}

你可以使用两个 for 循环对每个值检查每个值。 如果发现重复值,则迭代停止。

这里建议使用标记语句来中断外部循环。


var numbers = [1, 3, 6, 7, 5, 7, 6, 6, 4, 9, 10, 2, 11],


 i, j;



outer: for (i = 0; i <numbers.length - 1; i++) {


 for (j = i + 1; j <numbers.length; j++) {


 if (numbers[i] === numbers[j]) {


 console.log('found', numbers[i], 'at index', i, 'and', j);


 break outer;


 }


 }


} 

遍历每个项目,并且查找是否在不同的索引上找到相同的项目,如果是,则重复它,并且将它保存到重复变量和中断循环,


var numbers = [7, 5, 7, 6, 6, 4, 9, 10, 2, 11];


var duplicate = null;


for (var i = 0; i <numbers.length; i++) {


 if (numbers.indexOf(numbers[i])!== i) {


 duplicate = numbers[i];


 break;//stop cycle 


 }


}


console.log(duplicate);

var numbers = [7, 5, 7, 6, 6, 4, 9, 10, 2, 11];


var map = {};



for (var i = 0; i <numbers.length; i++) {


 if (map[numbers[i]]!== undefined) {


 console.log(map[numbers[i]]);


 break;


 } else {


 map[numbers[i]] = i;


 }


}

好吧,我们把这个分解一下。 我们要做的是创建一个数字映射到它们第一次出现的索引。 因此,当我们遍历数字数组时,我们检查它是否在我们的map中。 如果是我们找到它,并返回值在我们的map。 否则我们将数字添加到map中,它指向它第一次出现的索引。 我们使用map的原因是它是快速的O(1),所以整个运行时是 O(n),,这是你可以在未排序数组上完成的最快。

...