我在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));
答案 0 :(得分:1)
这种比较没有意义:
if(!myArr[arr[i]]){
true
仅当!myArr[arr[i]]
可以转换为true
时才会1
您在目标数组myArr
中获得两次arr[0]
,因为arr[1]
和1
都等于myArr
而1
在i = 0
arr[0] = 1
myArr[1] = undefined
处有一个未定义的元素{1}}执行条件语句时的两次第一次迭代的索引。
第一次迭代
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]);
}
没有添加任何内容。
在将目标数组添加到目标数组中之前,您应该检查当前值是否未包含在目标数组中:
rank()
答案 1 :(得分:0)
使用此条件代替推送
if(myArr.indexOf([arr[i])===-1)
答案 2 :(得分:0)
myArr.push(arr[i]);
会推回数组myArr
(就像堆栈一样),因此元素&#39; 1&#39;将在索引0。
myArr[arr[i]]
检查索引arr[i]
处的元素是否存在,但是将推送另一个。
如上所述,使用indexof()
只会搜索并在元素存在时给出索引。