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

Removing Values from an Array using the Filter Method

本文关键字:删除 数组 筛选 方法      更新时间:2024-06-11

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

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);

您可以将Array#filter与箭头函数Array#includes和rest参数一起使用。

演示

function destroyer(arr, ...remove) {
    return arr.filter(e => !remove.includes(e));
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

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);

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));

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));

使用rest参数指定后续参数,使用带箭头函数的Array.prototype.filter()筛选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))