我有一系列动物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']
注意:我不想要突变,所以请不要建议改变数组的解决方案。
答案 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);