在计算元素数量方面似乎有很多类似问题,但我没有用我的问题来实现它们。
在jquery ajax之后,我得到了返回的JSON数据,看起来像这样
Object {0: Object, 1: Object , xxxx:"asdf" ,yyyy:"asdf", zzzz:"asdf"}
我希望在这些{}大括号之间获得对象的数量(不包括那些xxx,yyy元素)
我尝试.length
无效
我也试过使用这个Length of a JavaScript object但是返回每个对象中的元素数量。我只想要对象的数量
谢谢
答案 0 :(得分:2)
试试这个:
var json = { 0: {}, 1: {}, xxxx: "asdf", yyyy: "asdf", zzzz: "asdf" };
function typeOf( obj ) {
return ({}).toString.call( obj )
.match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}
var total = 0;
for ( var o in json ) {
if ( typeOf( json[o] ) == 'object' ) {
total++;
}
}
console.log( total ); //=> 2
一切都是JavaScript中的对象。 typeof
运算符具有误导性,在这种情况下不起作用。您可以使用我在此博客文章中提取的typeOf
函数:Fixing the JavaScript typeof operator(值得一读)。还有其他方法,但这似乎是最直接的。
答案 1 :(得分:1)
如果对象是具有数字属性名称的对象并且数字属性按顺序计数,这不仅仅是巧合,您可以执行以下操作:
var obj = { /* your object here */ }
for (var i=0; i in obj; i++) {
// use obj[i] for something
}
// i is now equal to the number of numeric properties
这是有效的,因为只要i
足够高以至于您已用完属性,in
operator就会返回false
。如果您愿意,可以随意使用.hasOwnProperty()
。
显然,这是一种专门的解决方案,根本不测试不同属性的类型。 (要实际测试类型,请参阅elclanrs的解决方案 - 并以任何方式阅读他链接到的页面。)
答案 2 :(得分:0)
假设整个json位于名为json
的变量中:
var total_objects = 0;
$.each(json, function () {
if (typeof this == 'object') {
total_objects++;
}
});
但是,我很好奇为什么你需要知道这一点。
答案 3 :(得分:0)
您可以使用此问题Length of Javascript Object (ie. Associative Array)的代码中的自定义版本,并使用typeof
运算符检查元素的类型,并仅计算object
(或{{1} }})。
array