使用筛选方法从数组中删除值

时间:2016-04-14 05:32:46

标签: javascript arrays

给定一个数组和后续未知数量的参数,如何从初始数组中删除与这些参数具有相同值的所有元素?这就是我到目前为止所做的:

function destroyer(arr) {
    var arrayOfArgs = [];
    var newArray = [];
    for (var i = 0; i < arguments.length; i++) {
        newArray = arr.filter(function (value) {
            return value !== arguments[i + 1];
        });
    }
    return newArray;
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);

2 个答案:

答案 0 :(得分:1)

您可以将Array#filter与箭头功能Array#includesrest parameters一起使用。

Demo

function destroyer(arr, ...remove) {
    return arr.filter(e => !remove.includes(e));
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

&#13;
&#13;
function destroyer(arr, ...remove) {
    return arr.filter(e => !remove.includes(e));
}

var updatedArr = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
console.log(updatedArr);
&#13;
&#13;
&#13;

ES5中的等效代码:

function destroyer(arr) {
    var toRemove = [].slice.call(arguments, 1);
    return arr.filter(function(e) {
        return toRemove.indexOf(e) === -1;
    });
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

&#13;
&#13;
function destroyer(arr) {
    var toRemove = [].slice.call(arguments, 1);
    return arr.filter(function (e) {
        return toRemove.indexOf(e) === -1;
    });
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用rest parameters指定后续参数,Array.prototype.filter()使用arrow function来过滤arr,使用Array.prototype.includes()来确定是否args包含特定项目。

function destroyer(arr, ...args) {
  return arr.filter(x=> !args.includes(x))
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3))