我有一個演算法,其中一些陣列將被賦予一個新索引,但新索引不是連續的。為了時間的緣故,假設新索引是隨機分配給陣列的。假設我有這個陣列:
const arr = [];
arr[5] = 'a'
arr[2] = 'b'
arr[9] = 'c'
arr[0] = 'd'
如果我console.log
將此陣列輸出到輸出視窗,我會得到:
['d', empty, 'b', empty × 2, 'a', empty × 3, 'c']
我想知道是否可以關閉/洗掉值之間的那些空白間隙,以便陣列條目按它們的實際索引排序,所以我可以獲得這個輸出:
['d', 'b', 'a', 'c']
有沒有一種簡單易行的方法來做到這一點?
uj5u.com熱心網友回復:
您可以只使用Array.prototype.filter
和過濾掉未定義的值。您可以通過使用運算子將??它們強制為布林值來采取捷徑!!
:
arr.filter(x => !!x);
這個檢查是松散/臟的,因為任何虛假都會被強制為 false,例如 numeric 0
。如果你真的想要嚴格并且只過濾掉undefined
,那么你需要一個更嚴格的謂詞:
array.filter(x => typeof x !== 'undefined');
const arr = [];
arr[5] = 'a';
arr[2] = 'b';
arr[9] = 'c';
arr[0] = 'd';
console.log(arr);
console.log(arr.filter(x => !!x));
console.log(arr.filter(x => typeof x !== 'undefined'));
uj5u.com熱心網友回復:
只需使用Array.splice()方法來“清理”您的陣列,并創建一個新陣列。
需要使用反向索引進展
const arr = [];
arr[5] = 'a';
arr[2] = 'b';
arr[9] = 'c';
arr[0] = 'd';
console.log(JSON.stringify(arr));
for (let i=arr.length; i-- > 0;)
{
if (arr[i]===undefined) arr.splice(i,1);
}
console.log(JSON.stringify(arr));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/506624.html
標籤:javascript 数组 排序 指数