检查稀疏数组是否为空

时间:2014-04-07 19:27:57

标签: javascript arrays is-empty

我有一个稀疏数组;也就是说,一些元素已经delete d。从中间不断添加和删除元素,因此非常大且非常稀疏。

在某些时候,每个元素都是undefined,但length不会为0 - 所以它是空的,但它并没有表达出来。我怎样才能检查是否发生了这种情况?

我能想到的最好的事情就是遍历整个怪物并检查它们是否全部undefined。但这对我的申请来说效率太低了。

5 个答案:

答案 0 :(得分:2)

我能想到的两种解决方案。两者都需要对您与阵列的交互进行一些修改。

第一种解决方案

保留一个柜台。

如果您只是保留一个表示数组中实际存在的元素数量的计数器,那么空白检查仅仅是比较。

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效率较低(并且考虑到效率,第一种解决方案可能更适用)。

答案 1 :(得分:2)

你可以使用数组方法 some ,当它遇到任何非虚假值时退出:

a.some(Boolean); //如果数组没有真值,则返回false

或者,如果false是可能的值,请检查不是=== undefined:

a.some(function(itm){
   return itm !==undefined;
});

答案 2 :(得分:1)

虽然这可能不是最有效的,但它的确非常简洁:

Object.keys(myArr).length === 0

它可能适用于性能较低的应用程序。

答案 3 :(得分:0)

您可以使用对拼接的调用来模拟删除列表:

myArr.splice(indexToRemoveAt,nubmerOfElementsToRemove);

所以对于你的用例:

myArr.splice(indexToRemoveAt,1)

答案 4 :(得分:0)

为我工作sparseArray.size()== 0