繁体   English   中英

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

[英]How do I remove multiple elements from an array?

我想写一个 function 传递一个数组和一个可选数量的值作为参数从数组中删除。 我的 function 在只有 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) )

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

问题在于您的索引,您正在使用 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))
}

我这样写纯粹是为了维护你的 function。

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

每次你的 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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM