我有一组动物arr = ['cat','dog','elephant','lion','tiger','mouse']
我想编写一个函数remove(['dog','lion']),它可以从arr中删除元素,我们能用es6扩展来编写这个函数吗?
示例:
arr = ['cat','dog','elephant','lion','tiger','mouse']
remove(['cat', 'lion'])arr应该改为
arr = ['dog','elephant','tiger','mouse']注意:我不想要突变,所以请不要建议改变数组的解决方案。
发布于 2017-09-22 11:08:26
不,你不能,因为他们不在一起。有一些关于进一步扩展和rest语法的讨论,但即使在这些讨论中,我也不认为可能出现一系列不连续的选择。
我认为您能得到的最接近的方法是专门调用前几个,然后对'lion'之后的所有内容使用rest语法。
const arr = ['cat','dog','elephant','lion','tiger','mouse'];
const arr2 = [arr[1], arr[2], ...arr.slice(4)];
console.log(arr2);
...which我肯定不是你想做的。:-)
发布于 2017-09-22 11:52:31
据我所知,您正在寻找一个函数,该函数的参数是使用spread语法定义的。下面是一个示例:
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应该被更改为.
发布于 2019-08-17 00:37:00
我不明白所选答案是被选中的,因为它不包含从数组中删除元素的最终目标的解决方案。
不能单独使用slice来删除,但可以分割和传播:
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;
}https://stackoverflow.com/questions/46363210
复制相似问题