我试图创建一个函数,将元素从一个数组推送到另一个数组但不允许多个具有相同值的条目。以下代码不会基于我的条件中断函数,而是第二次将匹配元素推送到新数组中。此外,当我使用参数1,2或3运行代码时,它们将被推送到新数组,但是当我传递函数数字4时,我得到打印的语句"数字不存在。& #34;只是想知道为什么会这样,以及如何解决它。谢谢!
myArray = [1,2,3,4];
newOne = [];
function checkArray(num) {
if ((num in myArray) && (num in newOne)) {
return;
}
else if (num in myArray) {
newOne.push(num);
console.log(newOne);
}
else {
console.log("number not present");
}
}
checkArray(3);
checkArray(3);
checkArray(4);
答案 0 :(得分:0)
您不能使用in运算符来检查数组是否包含值。请改用函数indexOf()
。如果值不在数组中,则IndexOf()返回-1,否则返回值的索引。
in运算符检查数组中是否存在索引num
。
...
if ((myArray.indexOf(num) != -1) && (newOne.indexOf(num) != -1)) {
return;
}
else if (myArray.indexOf(num) != -1) {
newOne.push(num);
console.log(newOne);
}
...
答案 1 :(得分:0)
in
运算符的定义如下:
如果指定的属性在,则in运算符返回true 指定的对象。
数组是javascript中的索引对象。所以命令4 in myArray
;检查myArray是否有一个名为4的属性,它不会检查是否有一个值为4的元素。而0 in myArray
返回true不是因为myArray
中有0而myArray
有名为0的属性。将项目放入数组时,它实际上将相应索引中的值保存为属性。
var myArray = [2,4];
console.log(0 in myArray); // prints true as myArray has a field in 0th index
console.log(1 in myArray); // prints true as myArray has a field in 1st
console.log(2 in myArray); // prints false as myArray does not have a field named 2
如果要检查数组中是否存在值,则应使用indexOf
。
if(myArray.indexOf(4) > -1) // myArray contains 4