使用spread从数组中删除元素

时间:2017-09-22 11:02:53

标签: javascript ecmascript-6

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

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

示例:

arr = ['cat','dog','elephant','lion','tiger','mouse']
remove(['cat', 'lion'])

应该更改为

arr = ['dog','elephant','tiger','mouse']

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

6 个答案:

答案 0 :(得分:1)

如果您想传递许多字符串,例如getPrivateKey,您可以使用点差。否则,我不认为传播可以帮助你。

答案 1 :(得分:1)

不,你不能,因为他们并不紧挨着彼此。已经进行了一些关于进一步采用传播和休息语法的讨论,但即使在那些讨论中,我也不认为一系列不连续的选择是可能的。

我认为你能得到的最接近的是专门调用前几个,然后在'lion'后使用rest语法:



const arr = ['cat','dog','elephant','lion','tiger','mouse'];
const arr2 = [arr[1], arr[2], ...arr.slice(4)];
console.log(arr2);




......我确定你不想做什么。 : - )

答案 2 :(得分:1)

您可以使用iterator并使用spread运算符从迭代中排除值。

顺便说一下,这不是真的可取。

.as-console-wrapper { max-height: 100% !important; top: 0; }
{{1}}

答案 3 :(得分:1)

根据我的理解,你正在寻找一个使用扩展语法定义其参数的函数。 这是一个例子:



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应该改为..

答案 4 :(得分:0)

我听不懂所选答案

const items = ['cat', 'dog', 'elephant', 'lion', 'tiger', 'mouse']
const valuesToRemove = ['dog', 'lion']
const filteredItems = items.filter(item => !valuesToRemove.includes(item))

答案 5 :(得分:0)

您可以使用array.filter方法,它将返回带有过滤值的数组,

var filterMe = ["cat", "dog", "elephant", "lion", "tiger", "mouse"];
var answer = filterMe.filter((item) => item !== "dog")
                     .filter((item) => item !== "lion");
console.log(answer);