我需要在数组中找到第一个重复的数字,然后在控制台中打印此数字的索引。在下面的代码中,我到达代码找到重复但打印其索引的那一刻。简单来说,2在数组中是重复的,但它位于第一位,所以我需要打印索引“0”。
var sameNum = [2, 4, 5, 2, 3, 5, 1, 2, 4];
var firstIndex = [];
for (var i = 0; i < sameNum.length; i++) {
for (var j = i; j < sameNum.length; j++) {
if (i != j && sameNum[i] == sameNum[j]) {
firstIndex = [i];
}
}
}
console.log(firstIndex);
答案 0 :(得分:2)
如果我正确理解了这个问题(你正在寻找多次出现的数字的第一个索引),那么i的值就是你正在寻找的那个代表索引。
if(i != j && sameNum[i] == sameNum[j]) {
firstIndex.push(i);
// or print it //
console.log(i)
}
答案 1 :(得分:0)
我已使用此solution
Array.prototype.getDuplicates = function () {
var duplicates = {};
for (var i = 0; i < this.length; i++) {
if(duplicates.hasOwnProperty(this[i])) {
duplicates[this[i]].push(i);
} else if (this.lastIndexOf(this[i]) !== i) {
duplicates[this[i]] = [i];
}
}
return duplicates;
};
console.log([1, 2 ,3 ,4 ,5 ,6 ,6 ,7 ,8 ,9].getDuplicates());
答案 2 :(得分:0)
我会关联数组(快速)查找/存储遇到的值。
var inputArray = [1, 2 ,3 ,4 ,5 ,6 ,6 ,7 ,8 ,9];
var encounteredIndices = {};
for(var i = 0; i < inputArray.length; i++)
if (encounteredIndices[inputArray[i]])
console.log(i); // Or add to some array if you wish
else
encounteredIndices[inputArray[i]] = 1;
答案 3 :(得分:0)
如果需要,您可以先对数组进行排序。在执行此操作时,它将按升序排列。然后使用forEach
循环遍历数组,并获取索引
var sameNum = [1, 3, 2, 4, 5, 6, 6, 6, 7, 7, 7, 8, 9];
var firstIndex = [];
// sorting the array and iterating over it
// forEach array method accepts three parameter of which index is one of the parameter
sameNum.sort().forEach(function(item, index) {
if (sameNum[index + 1] == sameNum[index]) {
console.log(index + 1);
}
})
&#13;
答案 4 :(得分:0)
试试这个: -
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<input id="input" type="time">
<button onclick="live()">run</button>
<!---->
<p id="output">Output</p>
<script>
function live() {
var sameNum = [1, 2 ,3 ,4 ,6 ,6 ,7 ,8 ,9];
var firstIndex;
for(var i = 0; i < sameNum.length; i++) {
for(var j = i; j < sameNum.length; j++) {
if(i != j && sameNum[i] == sameNum[j]) {
firstIndex = i;
}
if (firstIndex != null){break;}
}
}
if (firstIndex == null){
alert("No repeating element");
}
else{
alert(firstIndex);
}
}
</script>
</body>
</html>
答案 5 :(得分:0)
在这种情况下,嵌套循环是一个糟糕的解决方案。它给出O(n^2)
复杂度,我们可以用地图线性求解。
我们可以使用地图来跟踪到目前为止在单个循环中显示的字母:
var sameNum = [1, 2 ,3 ,4 ,5 ,6 ,6 ,7 ,8 ,9];
var lettersMap = {};
var firstIndex = -1;
for (var i = 0; i < sameNum.length; i++) {
if (lettersMap[sameNum[i]]) {
firstIndex = i;
break;
}
else {
lettersMap[sameNum[i]] = true;
}
};
console.log(firstIndex);
答案 6 :(得分:0)
您可以使用&#34; j&#34;获取重复值的索引,如此
var sameNum = [1, 3, 2 ,3 ,4 ,5 ,6 ,6 ,7 ,8 ,9];
var firstIndex = [];
for(var i = 0; i < sameNum.length; i++) {
for(var j = i; j < sameNum.length; j++) {
if(i != j && sameNum[i] == sameNum[j]) {
console.log("--------"+sameNum[i]+"--------");
console.log("Index: "+ j);
}
}
}
&#13;