我有一个包含对象的数组。我需要在循环中找到第一个重复值。我想我需要使用break,但它不起作用。
这是我的代码:
var arrWithNumbers = [2,4,5,2,3,5,1,2,4];
var firstIndex = 0;
for(var i=0; i<10; i++) {
if(arrWithNumbers.length == firstIndex[i]) {
firstIndex = arrWithNumbers;
break;
}
}
console.log(firstIndex);
答案 0 :(得分:1)
你可以循环,直到得到与实际索引相同数字的索引。
此提案使用Array#indexOf
,其fromIndex
大于实际索引。
var array = [2, 4, 5, 2, 3, 5, 1, 2, 4],
index = 0,
second;
while (index < array.length) {
second = array.indexOf(array[index], index + 1);
if (second !== -1) {
break;
}
index++;
}
console.log(index);
console.log(second);
哈希表方法
var array = [2, 4, 5, 2, 3, 5, 1, 2, 4],
index = 0,
hash = Object.create(null);
while (index < array.length) {
if (array[index] in hash) {
break;
}
hash[array[index]] = index;
index++;
}
console.log(hash[array[index]], index);
答案 1 :(得分:1)
我会利用本机JS Map
对象并迭代数组,直到我们通过向地图添加新元素找到我们已经遇到的项目。
使用find
我们只需要在最坏的情况下循环一次数组,并使用Map我们最小化查找时间。
const arr = [2, 4, 5, 2, 3, 5, 1, 2, 4];
let m = new Map();
const firstDuplicate = arr.find(x => {
if (m.has(x)){
return true;
} else {
m.set(x, 1);
};
});
console.log(firstDuplicate);
答案 2 :(得分:0)
一般的编程方式(不是js方式)就是这样的。
var arrWithNumbers = [2,4,5,2,3,5,1,2,4];
var firstIndex = '';
var foundNum = false;
for(var i=0; i<10; i++) {
for(var j=i+1; j<10; i++) {
if(arrWithNumbers[i] == arrWithNumbers[j]) {
firstIndex = arrWithNumbers[i];
break;
}
}
if(foundNum)
break;
}