javascript - 将不重复的数字添加到数组中

标签 javascript arrays

我用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] 都等于1myArr 在执行条件语句时的前两次迭代的 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/

相关文章:

javascript - 如何使用 javascript 或 lodash 过滤嵌套数组

ruby - 为什么 [1..5] == [1,2,3,4,5] 不是?

PHP "for"循环列出所有偶数并显示数组中所有奇数的总和

javascript - (function(){})() 有这方面的文档吗?

javascript - 使用 Javascript 从整个 div 中提取图像 src

PHP |通过重新排序从数组中删除元素?

c# - 检查数组是否为空且有内容

javascript - 强制 "Tab"点击在元素内移动 - Jquery/Javascript

javascript - 草率的元素设计在 Safari 中不起作用

javascript - 从txt文件中获取值