Javascript 将不重复的数字添加到数组中
我用javaScript编写了一个函数,检查这些数字是否是第一次出现,如果是,它将被添加到数组中。出于某种原因,第一个数字总是重复,例如: 如果我们通过[1,1,1,2,3,3,4,5] 它将打印[1,1,2,3,4,5],而不是[1,2,3,4,5] 谁能告诉我我错过了什么?? 先谢谢你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
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
。也许有人可以更具原创性一点?非常感谢你们,作为一个初学者,我有时很难调试自己的代码。你们向我解释的内容完全有道理。再次感谢。