javascript:从第二个数组中的数组中删除值

时间:2015-09-02 11:34:39

标签: javascript arrays

使用纯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);

应该使用一个函数,使用一个或多个附加参数中的值从第一个参数(数组)中删除值。

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 parametersArrow Functions

enter image description here

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