簡體   English   中英

如何在JavaScript中同時從不同的索引中刪除數組中的多個元素?

[英]How to remove more than one elements from an array from different indexes at same time in JavaScript?

我有一個整數數組,我正在使用.push()方法添加。

我知道splice()方法在數組中添加/刪除項目,並返回刪除的項目。

但是有沒有辦法同時從不同索引的數組中刪除多個元素?

我知道我們也可以使用filter()方法但filter()方法創建一個新數組,其中包含所有傳遞由我提供的函數實現的測試的元素,這是我不想要的。

例如: -

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

我知道刪除3和5我可以按照以下步驟操作: -

  1. array.splice(2,1);
  2. array.splice(3,1);

但是,如果不使用splice()方法兩次,我可以一步完成嗎?

如果您知道要刪除的確切值,則可以使用array.filter()

這會同時從不同索引的數組中刪除多個元素。

你案例中的例子:

 var filtered = [1,2,3,4,5].filter(value => { return value !== 3 && value !== 5 }); console.log(filtered) 

您可以在解構賦值時使用尾隨逗號來從數組中選擇特定元素,將數組中的結果值分配給原始數組引用。

 var array = [1,2,3,4,5]; {let [a,b,,c,,] = array; array = [a,b,c]}; console.log(array); 

您可以在數組上使用對象解構來僅從數組中獲取特定索引

 var array = [1,2,3,4,5]; {let {0:a,1:b,3:c} = array; array = [a,b,c]}; console.log(array); 

您還可以使用.forEach()迭代一個元素數組來匹配, .indexOf() .splice()來刪除與數組中元素值匹配的元素

 var array = [1,2,3,4,5]; [3, 5].forEach(p => array.splice(array.indexOf(p), 1)); console.log(array); 

使用for..of循環, Array.prototype.findIndex()Array.prototype.splice()

 var array = [1,2,3,4,5]; var not = [3, 5]; for (let n of not) array.splice(array.findIndex(v => v === n), 1); console.log(array); 

使用for..of循環與Array.prototype.entries()Array.prototype.some()Array.prototype.splice()

 var array = [1,2,3,4,5]; var not = [3,5]; for (let [k, p] of array.entries()) not.some(n => !(np)) && array.splice(k, 1); console.log(array); 

你也可以使用for循環, Object.assign()來設置索引以保持在數組的開頭,調用.splice()並將參數設置為- .length要從數組中刪除的元素數量

 var array = [1,2,3,4,5]; var not = [3,5]; for (var o = {}, k = -1, i = 0; i < array.length; i++) { if (!not.some(n => n === array[i])) o[++k] = array[i]; } Object.assign(array, o).splice(-not.length); console.log(array); 

Array.prototype.reduce()Object.assign()

 var array = [1,2,3,4,5]; var not = [3,5]; Object.assign(array, array.reduce(([o, not, k], p) => [Object.assign(o, !not.some(n => n === p) ? {[++k]:p} : void 0), not, k] , [{}, not, -1]).shift() ).splice(-not.length); console.log(array); 

另一個選項,如果數字是唯一的,則使用Set.delete() ,在解構賦值時使用rest元素將Set對象轉換為Array

 var array = new Set; var not = [3, 5]; for (let n = 1; n <= 5; n++) array.add(n); for (let n of not) array.delete(n); [...array] = array; console.log(array); // `array = new Set(array)` 

當您知道需要刪除的特定值以及陣列較小時的硬編碼:

 var array = [1,2,3,4,5,6,7]; array.splice(2,3,4); console.log(array); 

也許你可以這樣做到位;

 var arr = [1,2,3,4,5,17,23,37,61,15], itemsToGetRidOff = [3,17,15,1,23]; arr.reduceRight((_,e,i,a) => itemsToGetRidOff.includes(e) && a.splice(i,1),[]); console.log(arr); 

暫無
暫無

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

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