如何在数组中找到第一个频率值?

时间:2017-05-09 11:45:45

标签: javascript arrays

我有一个包含对象的数组。我需要在循环中找到第一个重复值。我想我需要使用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);

3 个答案:

答案 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;
}