2016-03-08 151 views
0

我试图创建一个将元素从一个数组推入另一个数组但不允许多个相同值的条目的函数。下面的代码不会基于我的条件突破该函数,而是将匹配元素第二次推入到新阵列中。此外,当我使用参数1,2或3运行代码时,它们将被推送到新的数组中,但是当我将函数传递给数字4时,我得到打印语句“数字不存在”。只是想知道为什么会发生这种情况,以及如何解决这个问题。谢谢!不允许将重复元素插入到JavaScript数组中

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

[在运营商](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in)不检查内容,它检查存在。 – Teemu

+0

'in'运算符检查给定* index *是否在数组中,* index *是否为值。你可以使用'Array#indexOf'方法来检查数组是否包含给定的值。 – csharpfolk

+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); 
} 
... 
0

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

0
myArray = [1,2,3,4]; 
newOne = []; 
function checkArray(num) { 
    if ((myArray.indexOf(num) >= 0) && (newOne.indexOf(num) >= 0)) { 
     return; 
    } 
    else if (myArray.indexOf(num) >= 0) { 
     newOne.push(num); 
     console.log(newOne); 
    } 
    else { 
     console.log("number not present"); 
    } 

} 

checkArray(3); 
checkArray(3); 
checkArray(4); 

我不知道这是否(在arryName NUM)语法在JavaScript法律。当我搜索它时,变成了PHP。这是我如何在JS中完成的。也是一个小提琴。 https://jsfiddle.net/zxb49h4z/