首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用spread从数组中删除元素

使用spread从数组中删除元素
EN

Stack Overflow用户
提问于 2017-09-22 11:02:52
回答 7查看 23.8K关注 0票数 4

我有一组动物arr = ['cat','dog','elephant','lion','tiger','mouse']

我想编写一个函数remove(['dog','lion']),它可以从arr中删除元素,我们能用es6扩展来编写这个函数吗?

示例:

代码语言:javascript
复制
arr = ['cat','dog','elephant','lion','tiger','mouse']
remove(['cat', 'lion'])

arr应该改为

代码语言:javascript
复制
arr = ['dog','elephant','tiger','mouse']

注意:我不想要突变,所以请不要建议改变数组的解决方案。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-09-22 11:08:26

不,你不能,因为他们不在一起。有一些关于进一步扩展和rest语法的讨论,但即使在这些讨论中,我也不认为可能出现一系列不连续的选择。

我认为您能得到的最接近的方法是专门调用前几个,然后对'lion'之后的所有内容使用rest语法。

代码语言:javascript
复制
const arr = ['cat','dog','elephant','lion','tiger','mouse'];
const arr2 = [arr[1], arr[2], ...arr.slice(4)];
console.log(arr2);

...which我肯定不是你想做的。:-)

票数 3
EN

Stack Overflow用户

发布于 2017-09-22 11:52:31

据我所知,您正在寻找一个函数,该函数的参数是使用spread语法定义的。下面是一个示例:

代码语言:javascript
复制
var arr = ['cat','dog','elephant','lion','tiger','mouse'];

function remove(...toRemove){
   toRemove.forEach(item => {
      var index = arr.indexOf(item);
      if(index != -1){
          arr.splice(index, 1);
      }
   })
}

remove('dog', 'lion'); // OR remove(...['dog', 'lion']);
console.log(arr);

这实际上是改变了原来的数组(它改变了它),您已经提到您不是在寻找突变,但是您也提到了这个arr应该被更改为.

票数 3
EN

Stack Overflow用户

发布于 2019-08-17 00:37:00

我不明白所选答案是被选中的,因为它不包含从数组中删除元素的最终目标的解决方案。

不能单独使用slice来删除,但可以分割和传播:

代码语言:javascript
复制
function removeOne(sourceList, value) {
  const index = sourceList.indexOf(value);
  if (index >= 0 && index < sourceList.length) {
    return [
       ...sourceList.slice(0, index),
       ...sourceList.slice(index+1),
    ];
  }
  return sourceList;
}

function remove(sourceList, removeList) {
  let res = [...sourceList]
  removeList.forEach((item) => {
    res = removeOne(res, item);
  })
  return res;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46363210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档