[英]How to delete elements from an array from different indexes by single method?
[英]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我可以按照以下步驟操作: -
- array.splice(2,1);
- 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.