使用纯javascript,从数组开始,我想通过删除与第二个数组中的任何值匹配的值来返回和数组。
我已经解决了这个问题,但我认为代码的数量超出了实际需要。
我希望只使用javascript来提供更简洁或更优雅的解决方案。
function removeValues(arr){
array = arguments[0];
args = Array.prototype.slice.call(arguments);
len = arguments.length;
filtered = array.filter(function(n){
x = true;
for (var i = 1; i < len; i++) {
if (n == args[i]) { x = false; }
}
return x;
});
return filtered;
}
removeValues([1,2,3,1,2,3],2,3);
应该使用一个函数,使用一个或多个附加参数中的值从第一个参数(数组)中删除值。
答案 0 :(得分:3)
试试这个......
function removeValues(){
var args = Array.prototype.slice.call(arguments).slice(1);
return arguments[0].filter(function(value) {
return args.indexOf(value) === -1;
});
}
removeValues([1, 2, 3, 1, 2, 3], 2, 3);
它完全相同,但稍微整理一下。
答案 1 :(得分:3)
当您使用filter函数时,不需要使用循环,因为您已经处于循环中。将参数转换为带有[].slice.call(arguments)
的数组后,可以使用indexOf负责返回数组中值的位置,如果值不存在,则返回-1
,我们将采取-1
您的代码也可以减少:
function removeValues(arr){
return arr.filter(function(val){
return [].slice.call(removeValues.arguments).slice(1).indexOf(val) === -1
})
}
console.log(removeValues([1,2,3,1,2,3],2,3))
ES6方法:使用Rest parameters和Arrow Functions
var removeValues = (arr, ...values) => arr.filter(val => values.indexOf(val) === -1)
答案 2 :(得分:1)
试试这样:
var array1 = [ 1, 2, 3, 4, 5 ];
var array2 = [ 2, 3 ];
var result = array1.filter( function ( elem ) {
return array2.indexOf( elem ) === -1;
});
参见示例:Running code