删除没有内置函数的JavaScript数组项



如果不使用pop((和splice((等内置函数,如何从JavaScript数组中删除项?

如果您不关心数组被重新索引,您可以使用delete运算符,但它会在删除值所在的位置留下一个undefined条目,并且数组的.length仍将与以前相同:

const arr = [1, 2, 3, 4, 5];
console.log(arr.length, `[${ arr.join(', ') }]`);
delete arr[2];
console.log(arr.length, `[${ arr.join(', ') }]`);

如果要从末尾删除元素,可以手动更新数组的.length属性:

const arr = [1, 2, 3, 4, 5];
console.log(arr.length, `[${ arr.join(', ') }]`);
arr.length = 3;;
console.log(arr.length, `[${ arr.join(', ') }]`);

否则,您可以使用循环遍历原始元素,并将要保留的元素推送到一个单独的数组:

const arr = [1, 2, 3, 4, 5];
console.log(arr.length, `[${ arr.join(', ') }]`);
const even = [];
for (let n of arr) {
if (n % 2 === 0) even.push(n);
}
console.log(even.length, `[${ even.join(', ') }]`);

您可以使用slice

const arr = [1,2,3,4,5];
console.log(arr.slice(0,4));  // [1,2,3,4];
console.log(arr.slice(1,5));  // [2,3,4,5];

您可以使用Array rest参数和该的析构函数

如果你想从头开始删除某些内容

let arr = [1, 2, 3, 4];
let [c, d, ...newarr] = arr;
console.log(newarr)

感谢Paul在评论部分提出arr.length--;。由于我之前使用的是pop((,所以我想删除的项目已经在最后了,所以效果很好。

您可以创建自己的方法,如下所示:

Array.prototype.removeItem = function(item) {
for (i = 0; i < this.length; i++) {
if (this[i] === item) {
for (var j = i; j < this.length - 1; j++) {
this[j] = this[j + 1];
}
this.length = this.length - 1
return;
}
}
}
var items = ['a', 'b', 'c', 'd'];
items.removeItem('c');

最新更新