Javascript&&运营商不按首选方式行事?

时间:2017-07-16 15:15:55

标签: javascript arrays

我正在慢慢学习JavaScript,到目前为止,我可以自己解决所有问题。但是我只是花了很多时间来解决这个问题。

基本上,我有两个数组,如果第二个数组中的数字与第一个数组中的数字匹配,则必须删除该数字。

因此,我能想到的最简单的解决方案是循环遍历数组的每个属性的for循环,如果它与第二个数组中的数字不匹配,则将其推入新数组。

我写了这段代码:

var arr = [1, 2, 3, 5, 1, 2, 3], newArr = [2, 3, 3];
var finalArr = [];

for (var i = 0; i < newArr.length; i++) { 
	if (arr[i] != newArr[0] && arr[i] != newArr[1] && arr[i] != newArr[2]) 
    	finalArr.push(arr[i]);
}

// ----> finalArr = [1]

目的是,它从名为“arr”的数组中取出每个值,将其与“newArr”值进行比较,如果值不匹配,则将其推入新数组。

有人能看到问题吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

var arr = [1, 2, 3, 5, 1, 2, 3], newArr = [2, 3, 3];
var finalArr = [];

for (var i = 0; i < arr.length; i++) { 
    if (arr[i] != newArr[0] && arr[i] != newArr[1] && arr[i] != newArr[2]) 
        finalArr.push(arr[i]);
}

// result: [1,5,1]

这是您更正的代码,请注意第二个数组并不总是需要包含三个元素,您可以使用for循环遍历它

答案 1 :(得分:1)

  

目的是,它从名为&#34; arr&#34;的数组中取出每个值,将它与&#34; newArr&#34; ...

的值进行比较

您没有迭代arr的每个值,因为您已经在循环中newArr.length了。您需要迭代到arr.length而不是

  

...如果值不匹配,请将其推入新数组。

您的代码假设newArr总是长度为3.可能是。但是,更通用的方法是使用Array#indexOf,其中返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1。

&#13;
&#13;
var arr = [1, 2, 3, 5, 1, 2, 3],
  newArr = [2, 3, 3];
var finalArr = [];

for (var i = 0; i < arr.length; i++) {
  if (newArr.indexOf(arr[i]) === -1) {
    finalArr.push(arr[i]);
  }
}

console.log(finalArr);
&#13;
&#13;
&#13;