打印数组javascript中重复数字的索引

时间:2017-07-05 17:45:12

标签: javascript arrays for-loop indexof

我需要在数组中找到第一个重复的数字,然后在控制台中打印此数字的索引。在下面的代码中,我到达代码找到重复但打印其索引的那一刻。简单来说,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);

7 个答案:

答案 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循环遍历数组,并获取索引

&#13;
&#13;
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;
&#13;
&#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;获取重复值的索引,如此

&#13;
&#13;
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;
&#13;
&#13;