[英]Remove elements from array using spread
我有一组动物arr = ['cat','dog','elephant','lion','tiger','mouse']
我想编写一个函数remove(['dog','lion'])
可以从 arr 中删除元素,我们可以使用 es6 spread 编写这个函数吗?
例子:
arr = ['cat','dog','elephant','lion','tiger','mouse']
remove(['cat', 'lion'])
arr 应该更改为
arr = ['dog','elephant','tiger','mouse']
注意:我不想要突变,所以请不要建议突变数组的解决方案。
不,你不能,因为它们并不相邻。 有一些关于进一步采用扩展和休息语法的讨论,但即使在这些讨论中,我也不认为一系列不连续的选择是可能的。
我认为你能得到的最接近的是专门调出前几个,然后对'lion'
之后'lion'
所有内容使用 rest 语法:
const arr = ['cat','dog','elephant','lion','tiger','mouse']; const arr2 = [arr[1], arr[2], ...arr.slice(4)]; console.log(arr2);
...我确定这不是你想要做的。 :-)
据我了解,您正在寻找一个使用扩展语法定义其参数的函数。 下面是一个例子:
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 应该改为......
如果你想传递很多字符串,比如remove('lion', 'dog')
你可以使用 spread 。 否则我不认为传播可以帮助你。
您可以使用迭代器并使用扩展运算符从迭代中排除值。
顺便说一句,这不是真的可取。
function remove(array, items) { array[Symbol.iterator] = function* () { for (let value of Object.values(this)) { if (!items.includes(value)) { yield value; } } }; } var array = ['cat', 'dog', 'elephant', 'lion', 'tiger', 'mouse']; remove(array, ['dog', 'lion']); console.log([...array]); console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我不明白所选的答案
const items = ['cat', 'dog', 'elephant', 'lion', 'tiger', 'mouse']
const valuesToRemove = ['dog', 'lion']
const filteredItems = items.filter(item => !valuesToRemove.includes(item))
您可以使用 array.filter 方法,它将返回带有过滤值的数组,
var filterMe = ["cat", "dog", "elephant", "lion", "tiger", "mouse"];
var answer = filterMe.filter((item) => item !== "dog")
.filter((item) => item !== "lion");
console.log(answer);
类似于前面的过滤器解决方案,但使用正则表达式。 如果删除数组很大,则很有用...
let arr = ['cat', 'dog', 'elephant', 'lion', 'tiger', 'mouse']; const removeArr = ['cat', 'lion']; const removeRegExp = new RegExp(removeArr.join('|')); arr = arr.filter(e => !removeRegExp.test(e)); console.log(arr);
如果您使用的是 Typescript,您还可以使用Omit
实用程序类型从您的对象/数组中删除特定键。
interface Todo {
title: string;
description: string; // <--- assuming you want to omit `description` key
completed: boolean;
createdAt: number;
}
type TodoPreview = Omit<Todo, "description">;
TodoPreview
类型现在需要一个包含其他成员但decription
了描述的对象
const todo: TodoPreview = {
title: "Clean room",
completed: false,
createdAt: 1615544252770,
};
const todo: TodoPreview = {
title: "Clean room",
completed: false,
description: 'this should not be here' // <--- TS compiler will complain
createdAt: 1615544252770,
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.