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之前重复.
在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])) // 4Run Code Online (Sandbox Code Playgroud)