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