如果不使用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');