我有两个这样的数组:
var arr = ["1", "3" , "4"];
var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
我想根据第一个数组中可用的数字从第二个数组中删除数字。
我尝试了这个,但是我得到了错误的值,例如2,4,6,8:
theButton.onclick = function removePassedInNumbers(arr){
for(var i = 0; i < arr2.length; i++){
if(arr2.indexOf(arr[i])){
arr2.splice(i, 1);
}
}
document.getElementById('myNumber').innerHTML = arr2;
}
<input type="button" id="theButton" onclick="removePassedInNumbers(arr)" value="Click here"/>
<p id="myNumber">hey</p>
这是小提琴:https://jsfiddle.net/4hLcanc6/
我哪里出错了?
答案 0 :(得分:3)
你可以使用filter()方法:
var arr = ["1", "3" , "4"];
var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
var res = arr2.filter(item => arr.indexOf(item)===-1);
console.log(res); // [ '2', '5', '6', '7', '8', '9' ]
或者使用ES5:
var res = arr2.filter(function(x) {return arr.indexOf(x)===-1});
答案 1 :(得分:2)
您可以使用类似的内容更新var svg = d3.select("svg");
var rectangles = svg
.append('g')
.selectAll('rect')
.data([0, 1])
.enter()
.append('rect')
.attr('class', function(d){ return 'rect' + (d+1); });
function
注意:var arr = ["1", "3" , "4"];
var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
arr.forEach(function(n){
var index = arr2.indexOf(n);
if(index !== -1) arr2.splice(index, 1);
})
console.log(arr2);
会更改您的数组splice
,如果您想要新数组而不更改原始arr2
,则应使用arr2
答案 2 :(得分:1)
此for循环不正确。即使像某些用户已经回答过,有更好的方法可以过滤数组,我想尝试解释为什么你这个循环错误。
让我们从第一行开始
for(var i = 0; i < arr2.length; i++)
在这里,您要在变量i
中存储您在arr2中的当前位置。确定。
if(arr2.indexOf(arr[i]))
这是禁忌。 arr[i]
可能不存在!!事实上,arr[3]
未定义,并且您在第四次进入循环时正在寻找它。
所以,让我们解决这个问题:
if(arr.indexOf(arr2[i]))
现在没问题。我们要求在arr
内查找arr2[i]
的值,这将是&#34; 1&#34;我们第一次跳进循环,&#34; 2&#34;第二次......和&#34; 9&#34;最后一次。
现在它会起作用。回顾一下:
for(var i = 0; i < arr2.length; i++){
if(arr.indexOf(arr2[i])){
arr2.splice(i, 1);
}
}
希望这有助于您了解代码中的内容。