我正在慢慢学习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”值进行比较,如果值不匹配,则将其推入新数组。
有人能看到问题吗?
提前致谢!
答案 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。
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;