我试图使用.forEach从另一个数组(输入)中删除一个数组(忽略)的内容。
作为下面的一个例子,我希望输入数组包含" b"和" h"但它含有" g"和" h"当我跑这个。
好奇为什么我没有得到我预期的结果,如果这是一个好方法。var input = ["a", "b", "g", "h"],
ignore = ["b", "h"];
var newInput = function(element, index, array){
if (input.indexOf(ignore[index]) > -1){
input.splice((ignore[index]), 1)
}
}
ignore.forEach(newInput);
答案 0 :(得分:1)
将您的条件替换为input.indexOf(element) > -1
。
由于您要使用忽略数组,因此ignore[index]
与element
相同。
将拼接更改为splice(input.indexOf(element), 1)
。
Array.splice()
将索引作为第一个参数,而您正在使用该元素。
答案 1 :(得分:1)
var input = ["a", "b", "g", "h"],
ignore = ["b", "h"];
var newInput = function(element, index, array){
if (input.indexOf(ignore[index]) > -1) {
input.splice(input.indexOf(ignore[index]), 1)
// ^^^^^^^^^^^^^ added this
}
}
ignore.forEach(newInput);
但该代码可能更清晰,例如ignore[index]
为element
var input = ["a", "b", "g", "h"],
ignore = ["b", "h"];
var newInput = function(element) {
var index = input.indexOf(element);
if (index > -1){
input.splice(index, 1)
}
}
ignore.forEach(newInput);
如果你真的想给女孩留下深刻印象
var input = ["a", "b", "g", "h"],
ignore = ["b", "h"];
var newInput = function(element, index) {
~(index = input.indexOf(element)) && input.splice(index, 1);
}
ignore.forEach(newInput);
我会告诉你一个班轮:p
mutliple deletions
var newInput = function(element) {
var index;
while (~(index = input.indexOf(element)))
input.splice(index, 1);
}
ignore.forEach(newInput);
答案 2 :(得分:1)
您应该使用Array.prototype.filter代替
var input = ['a', 'b', 'g', 'h']
var ignore = ['b', 'h']
var newInput = input.filter(function (el) {
return ignore.indexOf(el) === -1
})
请注意input
保持不变
答案 3 :(得分:1)
Array#filter
可能是最好的方法,但是如果你想要删除被忽略的元素,就像我使用splice
推断的那样,你可以这样做:
function ignore_elements(input, ignore) {
var i = 0;
while (i < input.length)
if (ignore.indexOf(input[i]) !== -1) input.splice(i, 1);
else i++;
}
通过循环输入中的元素而不是ignore
,您可以更轻松地消除要忽略的元素的所有出现,而不仅仅是第一个。