[英]Check if a sparse array is empty
我有一個稀疏數組; 也就是說,其中某些元素已被delete
的數組d。 元素不斷從中間添加和刪除,因此它非常大且非常稀疏。
在某些時候,每個元素都將是undefined
,但是length
不會是0 -因此它是空的,但是沒有表達出來。 如何檢查這種情況是否發生?
我能想到的最好的辦法是遍歷整個怪物,並檢查它們是否都不undefined
。 但這對於我的應用程序來說效率太低。
我可以想到兩種解決方案。 兩者都需要對與數組的交互進行一些修改。
如果僅保留一個表示數組中實際有多少個元素的計數器,則空度檢查僅僅是一個比較。
var n = 0;
// Adding something to the array:
myArr[2] = somethingDefined;
n ++;
// Removing from the array:
delete myArr[2];
n --;
// Check if empty
if(n == 0) {
console.log("myArr is empty.");
}
splice
而不是delete
splice
實際上將修改數組,而不是將值設置為undefined
。 例:
myArr.splice(2, 1); // Get rid of myArr[2]
並且這會使數組發生變化,並且將更改.length
因此您可以輕松檢查數組的實際長度。 請注意, splice
效率較低(考慮到您似乎對效率有所關注,第一個解決方案可能更適用)。
您可以使用一些在遇到任何非偽造值時退出的數組方法:
a.some(Boolean);
//如果數組沒有真實值,則返回false
或者,如果可能的值為false,則檢查not === undefined:
a.some(function(itm){
return itm !==undefined;
});
盡管這可能不是最有效的方法,但它可以非常簡潔地完成此操作:
Object.keys(myArr).length === 0
它可能適合於性能要求較低的應用程序。
您可以通過調用剪接來模擬刪除列表:
myArr.splice(indexToRemoveAt,nubmerOfElementsToRemove);
因此,對於您的用例:
myArr.splice(indexToRemoveAt,1)
為我工作sparseArray.size()== 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.