返回数组中的第一个重复数字

2 javascript arrays algorithm array-algorithms

我正在尝试解决一个简单的挑战,我编写一个返回数组中第一个重复数字的函数.

这是我试过的:

function duplicateNumber(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = arr.length; j >= 0; j--) {
            if (arr[i] === arr[j]) {
                var dup_num = arr[i]
            }
        }
    }
    return dup_num
}
Run Code Online (Sandbox Code Playgroud)

它似乎没有工作.我究竟做错了什么?

刚刚意识到我也是从结束循环,从而开始开始结束.

在数组= [3, 5, 6, 8, 5, 3]

重复的数字应该是5因为它在3之前重复.

ade*_*neo 5

在ES2015中,它真的很简单

let dupe = arr.find((k,i) => arr.lastIndexOf(k) !== i);
Run Code Online (Sandbox Code Playgroud)

你只需检查索引,看看在这个索引之前是否有相同值的索引,在这种情况下,它将是第一个 找到 重复的索引.

function duplicateNumber(arr) {
	return arr.find((k,i) => arr.indexOf(k) !==i);
}

console.log( duplicateNumber([3, 5, 6, 8, 5, 3]) ) // 5 (not 3)
console.log( duplicateNumber([1, 2, 3, 1, 2, 3]) ) // 1
console.log( duplicateNumber([1, 2, 3, 4, 4, 2]) ) // 4 (not 2)
Run Code Online (Sandbox Code Playgroud)

没有ES2015

function duplicateNumber(arr) {
  var item = null;

  for (var i = 0; i < arr.length; i++) {
    if (arr.lastIndexOf(arr[i]) !== i) {
      item = arr[i];
      break;
    }
  }

  return item;
}

console.log(duplicateNumber([3, 5, 6, 8, 5, 3])) // 5
console.log(duplicateNumber([1, 2, 3, 1, 2, 3])) // 1
console.log(duplicateNumber([1, 2, 3, 4, 4])) // 4
Run Code Online (Sandbox Code Playgroud)