提供初始数组(驱逐舰函数中的第一个参数),后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。
- >我正在尝试使用array.filter(),新的...而不是两个循环...这是代码...
function destroyer(arr) {
var args = Array.from(arguments);
var array = args.slice(1);
//console.log(array);
return array.forEach(function(val){
return arr.filter(function(tar){
return tar!==val;
});
});
}
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
console.log(ans);
答案 0 :(得分:1)
使用.indexOf()
函数,您可以检查元素是否在数组中。
function destroyer(arr) {
var args = Array.from(arguments)
var array = args.slice(1)
return arr.filter(function(v){
return array.indexOf(v) === -1
})
}
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
console.log(ans)
将显示[1, 1]
答案 1 :(得分:1)
您的方法运行正常,您只是没有正确返回值。
更好的方法是使用过滤器本身作为另一个答案的建议,但如果由于某种原因你想要它用forEach做,并在这里过滤如何。
function destroyer(arr) {
var args = Array.from(arguments);
var array = args.slice(1);
array.forEach(function(val){
arr = arr.filter(function(tar){
return tar!==val;
});
});
return arr;
}
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
console.log(ans);
答案 2 :(得分:0)
您可以使用以下内容。这有一个复杂的O(N * M),我认为这是你最好的。
function destroyer(arr) {
var args = Array.from(arguments);
var array = args.slice(1);
return arr.filter(function(tar){
return array.indexOf(tar) === -1;
});
}
var ans = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
console.log(ans);