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

use*_*729 324 javascript arrays

var arr = [1,2,3,5,6];
Run Code Online (Sandbox Code Playgroud)

我想删除数组的第一个元素,使其成为:

var arr = [2,3,5,6];
Run Code Online (Sandbox Code Playgroud)

要扩展这个问题,如果我想删除数组的第二个元素,使其变为:

var arr = [1,3,5,6];
Run Code Online (Sandbox Code Playgroud)

JP *_*shy 656

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

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

array.shift(); // 1

array // [2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

  • @Gabriel:这不是问题吗?我更喜欢`shift()`到`splice(...,...)`因为它更明确,更直接. (53认同)
  • 更正:它返回第一个元素,而不是新数组减去第一个元素,根据您提供的链接:) (6认同)
  • 这可行,但只会删除数组中的第一个元素。 (2认同)
  • 除非你拼接大型列表http://jsperf.com/splice-vs-shift3和http://jsperf.com/splice-vs-shift2,否则```shift```会更快 (2认同)

Gab*_*ams 331

要获得更灵活的解决方案,请使用该splice()功能.它允许您根据索引值删除数组中的任何项:

var indexToRemove = 0;
var numberToRemove = 1;

arr.splice(indexToRemove, numberToRemove);
Run Code Online (Sandbox Code Playgroud)

  • 如果你从谷歌来到这里:加布里埃尔更喜欢这个答案,但你应该知道还有shift(),见约瑟夫的回答. (13认同)
  • 以及后续问题:第二个元素是`arr.splice(1,1)`. (12认同)
  • 我更喜欢 `splice()` 而不是 `shift()`,因为它更灵活。我将来可能想做一些不同的事情,并且并不总是只想删除一个元素,甚至是第一个元素。 (2认同)

p3d*_*ola 59

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

var a = [1,2,3]
// [1,2,3]
a.shift()
// 1
a
//[2,3]
Run Code Online (Sandbox Code Playgroud)

  • 对Joseph Silvashy的回答有了很大的改进 - 描述和代码之间没有任何不一致. (4认同)

小智 45

arr.slice(begin[,end])
Run Code Online (Sandbox Code Playgroud)

非破坏性,拼接和移位将修改您的原始数组

  • 是的非变异.这应该更加明显. (2认同)

Anu*_*rag 15

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

这是从任何位置删除元素的小片段.这扩展了Javascript中的Array类,并添加了remove(index)方法.

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

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

var arr = [1,2,3,5,6];
arr.remove(0);
Run Code Online (Sandbox Code Playgroud)

要删除第二个项目,

arr.remove(1);
Run Code Online (Sandbox Code Playgroud)

这是一篇包含Array类的insert和delete方法的小文章.

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


Tha*_*now 13

也许是这样的:

arr=arr.slice(1);
Run Code Online (Sandbox Code Playgroud)


Kee*_*asa 7

有多种方法可以从数组中删除元素。让我在下面指出最常用的选项。我写这个答案是因为我找不到从所有这些选项中使用什么的正确理由。问题的答案是选项 3 ( Splice() )。

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
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)


Mar*_*ine 5

其他答案很好,我只想添加ES6Array函数的替代解决方案: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]
Run Code Online (Sandbox Code Playgroud)

删除第二个元素

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

删除奇数元素

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

删除没有库存的物品

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

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


Run Code Online (Sandbox Code Playgroud)