不改变原数组的情况下从JavaScript数组中删除元素
正如在之前的一篇文章中提到的,Array.prototype.splice()
经常被用来从数组中删除元素。它也可以向数组中插入元素,但它总是改变原数组。很多时候,这并不是你真正想要的,所以让我们来看看如何实现一个不改变原数组的 Array.prototype.splice()
版本。
Array.prototype.splice()
的核心行为如下:
- 保留数组开始到给定索引之间的元素。
- 从给定索引开始,删除指定数量的元素。
- 插入给定的元素(如果有的话)到给定索引之后。
- 保留剩余的元素。
通过分解这个行为,我们可以很容易地使用 Array.prototype.slice()
和 Array.prototype.concat()
来实现它。
const shank = (arr, index = 0, delCount = 0, ...elements) =>
arr
.slice(0, index)
.concat(elements)
.concat(arr.slice(index + delCount));
const names = ['alpha', 'bravo', 'charlie'];
const namesAndDelta = shank(names, 1, 0, 'delta');
// [ 'alpha', 'delta', 'bravo', 'charlie' ]
const namesNoBravo = shank(names, 1, 1); // [ 'alpha', 'charlie' ]
console.log(names); // ['alpha', 'bravo', 'charlie']