如何按索引从数组中删除多个元素?

Div*_*raj 3 javascript arrays lodash

Array.splice只要a是单个值,就可以使用它。假设我有一个包含 10 个元素的数组,我想删除元素 2,4 和 8,Array.splice(index,1)for循环中使用是一个坏主意,因为每个元素的索引在每次拼接操作后都会发生变化。

如何删除特定的数组项,然后相应地重新排列数组

var array = ["Apple", "Banana", "Peach", "Pumpkin", "Tomato", "Mango", "Guava"];

remove(array, 4,5); //Is there a lodash function for this?

//desired result --> ["Apple", "Banana", "Peach", "Guava"]
Run Code Online (Sandbox Code Playgroud)

Li3*_*357 8

有一个 Lodash 方法_.pullAt可以将数组中指定的元素(就地)拉出:

_.pullAt(array, [indexes])

array从对应的元素中删除元素indexes并返回删除元素的数组。

因此,像这样应用它:

var array = ["Apple", "Banana", "Peach", "Pumpkin", "Tomato", "Mango", "Guava"];
_.pullAt(array, [4, 5]);
Run Code Online (Sandbox Code Playgroud)

如果您想取出不相邻的项目(从文档中):

var array = ['a', 'b', 'c', 'd'];
var pulled = _.pullAt(array, [1, 3]);

console.log(array);
// => ['a', 'c']
Run Code Online (Sandbox Code Playgroud)

这将删除索引 4 和 5 处的元素,并返回删除的元素(如果需要的话)。


当然,您可以使用普通 JavaScript,像Nick A. 提到的那样向后查看并从后面删除项目。这样做的原因是因为从后面移除不会使更改成为length问题。考虑这个例子,我想删除第一个和第三个元素:

[1, 3, 7, 9]
Run Code Online (Sandbox Code Playgroud)

如果我要循环“向前”,我将删除索引 1 (3) 处的元素,但长度将更改为 3,并且索引 3 处将没有元素!如果我要向后循环,我会首先删除索引 3 处的元素(9)。那么长度将为 3,但这不会影响它之前的任何元素,索引 1 处的元素仍然位于索引 1 处,因此从后面的工作中删除。


小智 5

你可以循环反向:

var array = ["Apple", "Banana", "Peach", "Pumpkin", "Tomato", "Mango", "Guava"],
removeFromIndex = [4,5];    
for (var i = removeFromIndex.length -1; i >= 0; i--)
    array.splice(removeFromIndex[i],1);
Run Code Online (Sandbox Code Playgroud)

JSFIDDLE 演示