繁体   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