我用javaScript编写了一个函数,检查数字是否是第一次出现,如果是,则将其添加到数组中。由于某种原因,第一个数字总是重复,例如:
如果我们通过 [1,1,1,2,3,3,4,5] 它将打印出 [1,1,2,3,4,5] 而不是 [1,2,3,4,5]
谁能告诉我我错过了什么? 预先感谢您。
var numbers = [1,1,1,1,1,2,3,4,4,4,5,5,6,6,6,8];
function eliminateDup(arr){
var myArr = [];
for(var i = 0;i<arr.length;i++){
if(!myArr[arr[i]]){
myArr.push(arr[i]);
}
}
return myArr;
}
console.log(eliminateDup(numbers));
最佳答案
这种比较没有意义:
if(!myArr[arr[i]]){
仅当 !myArr[arr[i]]
可以转换为 true
时才为 true
。
您在目标数组 myArr
中得到两次 1
,因为 arr[0]
和 arr[1]
都等于1
和 myArr
在执行条件语句时的前两次迭代的 1
索引处有一个未定义的元素。
第一次迭代
i = 0
arr[0] = 1
myArr[1] = undefined
因此 if(!myArr[1])
为 true
。
您添加 1
。
第二次迭代
i = 1
arr[1] = 1
myArr[0] = 1 // now valued but not used in the test
myArr[1] = undefined;
因此 if(!myArr[1])
为 true
。
您仍然添加 1
。
第三次迭代
i = 2
arr[2] = 1
myArr[0] = 1
myArr[1] = 1
所以 if(!myArr[1])
是 false
。
没有添加任何内容。
您应该先检查当前值是否不包含在目标数组中,然后再将其添加到目标数组中:
if(myArr.indexOf(arr[i])==-1){
myArr.push(arr[i]);
}
关于javascript - 将不重复的数字添加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535647/