我正在尝试将JavaScript对象用作关联数组,一切都很顺利,直到我需要获取存储在其中的条目数。最简单,最优雅的方法是什么?我能想到的只是运行for each
循环或jQuery $.each
函数,看看它会做多少次迭代,但这看起来很糟糕。
答案 0 :(得分:29)
旧Firefox支持__count__
属性。较新的环境支持ES5的Object.keys
。对于较旧的环境,我们必须回退到只是迭代对象并手动计数(呃!):
function count(obj) {
if (obj.__count__ !== undefined) { // Old FF
return obj.__count__;
}
if (Object.keys) { // ES5
return Object.keys(obj).length;
}
// Everything else:
var c = 0, p;
for (p in obj) {
if (obj.hasOwnProperty(p)) {
c += 1;
}
}
return c;
}
答案 1 :(得分:26)
这对我有用:
Object.keys(obj).length
答案 2 :(得分:3)
我相信之前已经回答了这个问题,并且/或谷歌搜索可以引导您朝着正确的方向前进。不过,让我指出,如果你使用以下形式的循环,最大的问题之一是:
for (var attr in obj) { ....
对象是否会被你不一定添加的属性混乱,我记得的标准解决方案是另外使用hasOwnProperty的测试,请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty
答案 3 :(得分:2)
归结为此,或者在添加和删除对象中的属性时保持计数。
答案 4 :(得分:2)
遗憾的是,如果没有迭代它们,就不可能知道对象中的属性数量。以下是相当简单的:
function countProps(obj) {
var l = 0;
for (p in obj) l++;
return l;
}
var bob = { a: 1, b: 2};
alert(countProps(bob));