我的JSON由ajax请求返回,存储在data
变量中。
JSON看起来像这样(顶行是邮政编码/邮政编码,每个请求都不同):
{
"ML1 4EQ":{
"ExchangeCode":"WSMOT",
"ExchangeName":"MOTHERWELL",
"Options":{
"10":{
"Preference":"3rd Party Tail (TTB)",
"Supplier 1":9591,
"Supplier 2":3581,
"Wholesale":5200,
"RRP":6500
},
等等其他9个Options
。
}
}
}
我正在尝试计算返回的Options
的数量,但我从阅读其他问题尝试的所有内容似乎都无法返回undefined,只返回3
而不是{ {1}}(想想我的错误程度)。
这些包括
10
答案 0 :(得分:6)
这将计算第一个对象内的选项总数。
var count = 0;
for(var key in data){
for(var i in data[key].Options){
count++;
}
break;
}
答案 1 :(得分:1)
计算Object
中的属性数量并不完全是直截了当的。没有一个属性可以直接告诉你,如果你for...in
对它们进行计数,你也会获得继承的属性,所以如果有人在Object.prototype
上定义任何东西,你就会得到错误的答案。
在ECMAScript第五版中,你得到getOwnPropertyNames
,它返回一组非继承的属性名称:
var options= {'1': 'a', '2': 'b'};
Object.getOwnPropertyNames(options).length; // 2
对于尚不支持第五版的浏览器(主要是IE< = 8),您可以使用它来填充它:
if (!('getOwnPropertyNames' in Object)) {
Object.getOwnPropertyNames= function(o) {
var names= [];
for (var k in o)
if (Object.hasOwnProperty(k))
names.push(k);
return names;
};
}
但是,如果您可以控制JSON输出的格式,我强烈建议您将Options
对象转换为普通数组,这样可以更好地为您的数据建模。使用数组,您只需使用Options.length
。