簡體   English   中英

如何按索引從數組中刪除多個元素?

[英]How do I remove multiple elements from an array by index?

使用Array.splice ,只要它是單個值。 假設我有一個包含 10 個元素的數組,我想刪除元素 2,4 和 8,在for循環中使用Array.splice(index,1)是一個壞主意,因為每個元素的索引在每次拼接操作后都會發生變化。

如何刪除特定的數組項,然后相應地重新排列數組

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"]

你可以循環反向:

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);

JSFIDDLE 演示

有一個 Lodash 方法_.pullAt將元素從數組中(就地)拉出數組中指定的數組:

_.pullAt(array, [indexes])

從移除了元件array對應於indexes ,並返回移除的元件的陣列。

因此,像這樣應用它:

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

如果你想拉出不相鄰的項目(從文檔中):

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

這將刪除索引 4 和 5 處的元素,並返回刪除的元素(如果需要)。


當然,您可以使用普通的 JavaScript,像Nick A. 提到的那樣向后看並從后面刪除項目。 這樣做的原因是因為從后面移除不會使改變length成為問題。 考慮這個例子,我想刪除第一個和第三個元素:

[1, 3, 7, 9]

如果我要循環“轉發”,我將刪除索引 1 (3) 處的元素,但長度將更改為 3,並且索引 3 處將沒有元素! 如果我要循環向后雖然,我將在索引3的第一(9)除去的元素。 那么長度將為 3,但這不會影響它之前的任何元素,索引 1 處的元素仍處於索引 1 處,因此從后面的作品中刪除。

您需要采取的方法是以向后的方式刪除元素(不反轉數組,因為這具有相同的潛在問題,即在刪除時減少“尚未檢查”元素的索引。

您可以使用reduceRight方法,它的作用與Reduce非常相似,但它從(從右到左)迭代一個數組。

以下是如何做到這一點的示例:

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

let indexToRemove = [4, 5]; //We're looking to remove "Tomato" & "Mango"

array.reduceRight((_, elem, index) => {
    if (indexToRemove.includes(index)) { //Our condition(s)
        array.splice(index, 1);
    }
});

console.log(array); //Result: [ 'Apple', 'Banana', 'Peach', 'Pumpkin', 'Guava' ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM