我试过这种方式,但它给我错误的计数:
myArr = []; myArr[666] = 'hello there'; console.log(myArr.length); // returns me 667
它应该是1.我怎样才能以最快的方式获得好的数量呢?
解决方法
It should be 1.
不,它应该是667,因为这是JavaScript中标准数组的长度定义,aren’t really arrays at all.JavaScript中的数组本质上是稀疏的,这意味着它们可以有空洞(索引中没有存储任何类型的值).
How can I have the good count in the fastest way?
唯一的方法是循环.例如:
var count = 0; myArr.forEach(function() { ++count; }); console.log(count);
…或通过reduce在maček’s answer.forEach,reduce和其他此类访问条目实际存在,因此他们跳过稀疏数组中的漏洞.
我应该提一下,因为IE8仍然(叹气)有相当大的市场份额,你需要shim forEach并减少等等,如果你想使用它们. (这很容易.)
要做到这一点没有任何垫片,只计算实际索引属性(而不是其他类型的属性),然后松散:
var count = 0,name; for (name in myArr) { if (myArr.hasOwnProperty(name) && /^[0-9]+$/.test(name)) { ++count; } }
它使用稍微宽松的索引属性名称定义;如果你想要一个健壮的,请参阅this answer的“正确使用”部分.