如何从数组中删除多个元素?

How do I remove multiple elements from an array?

我想编写一个函数,它传递一个数组和一个可选数量的值作为参数从数组中删除。我的函数在只有 1 个值时有效,但在有多个值时失败。

const removeFromArray = function (arr, ...theArgs) {
  for (let i = 0; i < arr.length; i++) {
    if (theArgs.includes(arr[i])) {
      arr.splice(i, 1);
    }
  }
  return arr;
};

您可以使用 filter 方法:

const removeFromArray = function (arr, ...theArgs) {
  return arr.filter( val => !theArgs.includes(val) )
};

const list = [1,2,3];
const newList = removeFromArray(list, 2,3);

console.log(newList);

还有一个更简洁的版本:

const removeFromArray = (arr, ...args)=> arr.filter( val => !args.includes(val) )

提示:尽量避免改变原始数组,并在这些操作期间处理或return副本。

问题出在你的索引上,你正在使用 arr 的索引查找元素,并在数组中删除,这可能导致循环中的索引出现问题。 修改你的代码如下

const removeFromArray = function (arr, ...theArgs) {
  for (let i = 0; i < theArgs.length; i++) {
    if (arr.includes(theArgs[i])) {
      arr.splice(arr.indexOf(theArgs[i]), 1);
    }
  }
  return arr;
};

上面按您的方式修复了代码,但更好的方法是使用过滤器。

const removeFromArray = function (arr, ...theArgs) {
  return arr.filter(ele => !theArgs.includes(ele))
}

我这样写纯粹是为了维护你的功能

问题是因为您在从该数组循环时从数组中删除了项目。

每次你的for循环迭代数组,它都会得到一个新数组

例如(1,2,3,4,5 => 2,3,4,5), 但 i 值一直增加 1.

const removeFromArray = function (arr, ...theArgs) {
  for (let i = 0; i < arr.length; i++) {
  console.log(`arr:${arr}`,`item${arr[i]}`,`num${i}`)
  console.log(arr[i])
    if (theArgs.includes(arr[i])) {
      arr.splice(i, 1);
    }
  }
  return arr;
};
const testarray = [1,2,3,4,5]
console.log(removeFromArray(testarray,1,2,3))

我建议使用数组作为第二个参数。

var array1 = ['a','b','c'];

var elementsToRemove = ['a','b'];

const removeFromArray = function (array1, elementsToRemove) {
    var filtered  = array1.filter(function(value, index, array){ 
        return elementsToRemove.includes(value);
    });
    return filtered;
  }

  console.log(removeFromArray(array1,elementsToRemove));