Rog*_*lgo 6 javascript arrays size count
我试过这种方式,但它给我错误的计数:
myArr = [];
myArr[666] = 'hello there';
console.log(myArr.length); // returns me 667
Run Code Online (Sandbox Code Playgroud)
它应该是1.我怎样才能以最快的方式获得好的数量呢?
T.J*_*der 17
它应该是1.
不,它应该是667,因为这length
是在JavaScript中为标准数组定义的,它们根本不是真正的数组.JavaScript中的数组本质上是稀疏的,这意味着它们中可能有漏洞(索引中不存储任何类型的值).
我怎样才能以最快的方式获得好的数量呢?
唯一的方法是循环.例如:
var count = 0;
myArr.forEach(function() {
++count;
});
console.log(count);
Run Code Online (Sandbox Code Playgroud)
...或通过reduce
在maček的答案.forEach
,reduce
和其他这样的访问条目实际存在,因此他们跳过稀疏数组中的漏洞.
我应该提一下,因为IE8仍然(叹气)有相当大的市场份额,你需要垫片forEach
等等reduce
,如果你想使用它们.(这很容易.)
要做到这一点没有任何垫片,只计算实际索引属性(而不是其他类型的属性),然后松散:
var count = 0, name;
for (name in myArr) {
if (myArr.hasOwnProperty(name) && /^[0-9]+$/.test(name)) {
++count;
}
}
Run Code Online (Sandbox Code Playgroud)
它使用稍微宽松的索引属性名称定义; 如果你想要一个健壮的,请参阅这个答案的 "正确使用"部分.
您可以使用reduce计算非未定义属性的数量
var length = myArr.reduce(function(len) { return len+1; }, 0);
console.log(length); // 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
304 次 |
最近记录: |