簡體   English   中英

檢查稀疏數組是否為空

[英]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.

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