如何在 JavaScript 中从数组中删除元素?

var arr = [1,2,3,5,6];

删除第一个元素

我想移除数组的第一个元素,这样它就变成:

var arr = [2,3,5,6];

删除第二个元素

为了扩展这个问题,如果我想删除数组的第二个元素,那么它会变成:

var arr = [1,3,5,6];
341054 次浏览

对于更灵活的解决方案,使用splice()函数。它允许你根据索引值删除数组中的任何项:

var indexToRemove = 0;
var numberToRemove = 1;


arr.splice(indexToRemove, numberToRemove);

也许是这样的:

arr=arr.slice(1);

shift()最适合你的情况。shift()从数组中删除第一个元素并返回该元素。此方法更改数组的长度。

array = [1, 2, 3, 4, 5];


array.shift(); // 1


array // [2, 3, 4, 5]

写了一篇关于在Javascript数组中任意位置插入和删除元素的小文章。

下面是从任意位置删除元素的小代码片段。这在Javascript中扩展了Array类,并添加了remove(index)方法。

// Remove element at the given index
Array.prototype.remove = function(index) {
this.splice(index, 1);
}

因此,要删除示例中的第一项,调用arr.remove():

var arr = [1,2,3,5,6];
arr.remove(0);

要去掉第二项,

arr.remove(1);

下面是一个很小的文章,它具有Array类的插入和删除方法。

本质上,这与使用splice的其他答案没有什么不同,但是splice这个名字不是直观的,如果你在整个应用程序中都有这个调用,它只会使代码更难阅读。

arr.slice(begin[,end])

是非破坏性的,拼接和移位会修改你的原始数组

Array.prototype.shift方法从数组中删除第一个元素,并返回它。它修改原始数组。

var a = [1,2,3]
// [1,2,3]
a.shift()
// 1
a
//[2,3]

Array.splice()有一个有趣的属性,即不能用它来删除第一个元素。所以,我们需要求助于

function removeAnElement( array, index ) {
index--;


if ( index === -1 ) {
return array.shift();
} else {
return array.splice( index, 1 );
}
}

其他答案很好,我只是想用ES6数组函数添加一个替代解决方案:filter

filter()从现有数组中创建一个包含符合给定条件的元素的新数组。

因此,您可以轻松地使用它来删除不符合标准的项目。这个函数的好处是你可以在复杂的数组上使用它,而不仅仅是字符串和数字。

一些例子:

删除第一个元素:

// Not very useful but it works
function removeFirst(element, index) {
return index > 0;
}
var arr = [1,2,3,5,6].filter(removeFirst); // [2,3,4,5,6]

删除第二个元素:

function removeSecond(element, index) {
return index != 1;
}
var arr = [1,2,3,5,6].filter(removeSecond); // [1,3,4,5,6]

移除奇数元素:

function removeOdd(element, index) {
return !(element % 2);
}
var arr = [1,2,3,5,6].filter(removeOdd); [2,4,6]

移除库存中没有的物品

const inventory = [
{name: 'Apple', qty: 2},
{name: 'Banana', qty: 0},
{name: 'Orange', qty: 5}
];


const res = inventory.find( product => product.qty > 0);




你可以使用rest操作符来使用ES6解构赋值功能。逗号表示要删除元素的位置,rest(…arr)操作符表示数组的剩余元素。

const source = [1,2,3,5,6];


function removeFirst(list) {
var  [, ...arr] = list;
return arr;
}
const arr = removeFirst(source);
console.log(arr); // [2, 3, 5, 6]
console.log(source); // [1, 2, 3, 5, 6]

你也可以用reduce:

let arr = [1, 2, 3]


arr.reduce((xs, x, index) => {
if (index == 0) {
return xs
} else {
return xs.concat(x)
}
}, Array())


// Or if you like a oneliner
arr.reduce((xs, x, index) => index == 0 ? xs : xs.concat(x), Array())

不改变原始数组的Typescript解决方案

function removeElementAtIndex<T>(input: T[], index: number) {
return input.slice(0, index).concat(input.slice(index + 1));
}

有多种方法可以从数组中删除元素。让我指出下面最常用的选项。我之所以写下这个答案,是因为我无法从所有这些选项中找到一个合适的理由。问题的答案是选项3 (接头())。

1) SHIFT() -从原始数组中删除第一个元素并返回第一个元素

参见Array.prototype.shift ()的参考。仅当您想删除第一个元素,并且仅当您愿意更改原始数组时,才使用此方法。

const array1 = [1, 2, 3];


const firstElement = array1.shift();


console.log(array1);
// expected output: Array [2, 3]


console.log(firstElement);
// expected output: 1

2) SLICE() -返回数组的副本,由开始索引和结束索引分开

参见Array.prototype.slice ()的参考。不能从此选项中删除特定元素。您可以只对现有数组进行切片,并获得数组的连续部分。这就像从指定的索引中切割数组。原始数组不会受到影响。

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];


console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]


console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]


console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

3) SPLICE() -通过删除或替换特定索引上的元素来改变数组的内容。

参见Array.prototype.splice ()的参考。splice()方法通过删除或替换现有元素和/或在适当位置添加新元素来更改数组的内容。返回更新后的数组。原始数组被更新。

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]


months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]