如何根据参数从数组中删除数字

时间:2016-10-28 15:34:05

标签: javascript

我有两个这样的数组:

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/

我哪里出错了?

3 个答案:

答案 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);
  }
}

希望这有助于您了解代码中的内容。