[英]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);
有一個 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.