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

Javascript 将不重复的数字添加到数组中,javascript,arrays,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 = []; f

我用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));
var数=[1,1,1,1,2,3,4,4,4,5,5,6,6,6,8];
函数消除器(arr){
var myArr=[];

对于(var i=0;i使用此条件,对于push

if(myArr.indexOf([arr[i])===-1)

这种比较没有意义:

if(!myArr[arr[i]]){
只有当
!myArr[arr[i]
可以转换为
true

在目标数组
myArr
中获得两次
1
,因为
arr[0]
arr[1]
都等于
1
myArr
在执行条件语句时的第一次迭代的
1
索引中有一个未定义的元素


第一次迭代

i = 0 
arr[0] = 1
myArr[1] = undefined
i = 1     
arr[1] = 1
myArr[0] = 1 // now valued but not used in the test
myArr[1] = undefined;
所以
如果(!myArr[1])

您可以添加
1

第二次迭代

i = 0 
arr[0] = 1
myArr[1] = undefined
i = 1     
arr[1] = 1
myArr[0] = 1 // now valued but not used in the test
myArr[1] = undefined;
所以
如果(!myArr[1])

您仍然添加
1

第三次迭代

i = 2
arr[2] = 1
myArr[0] = 1 
myArr[1] = 1
所以
如果(!myArr[1])
false

没有添加任何内容


在将当前值添加到目标数组中之前,应检查当前值是否不包含在目标数组中:

if(myArr.indexOf(arr[i])==-1){
    myArr.push(arr[i]);
}
myArr.push(arr[i]);
将推到数组的后面
myArr
(就像堆栈一样),因此元素“1”将位于索引0处

myArr[arr[i]]
检查索引
arr[i]
中是否存在不存在的元素,因此将推送另一个1


如上所述,使用
indexof()
,如果元素存在,它将只搜索并给出索引。

为什么不使用
indexof
而不是这种混乱:
!myArr[arr[i]
注意,您可以使用
uniques=[…新的集合(数字)]
这假设输入已排序ascending@ASDFGerte好的,我们有四个(哦,等等,我们有五个)现在的答案是建议
indexOf
。也许有人可以更具原创性一点?非常感谢你们,作为一个初学者,我有时很难调试自己的代码。你们向我解释的内容完全有道理。再次感谢。