计算另一个对象中的对象数,javascript-json

时间:2012-12-15 06:08:11

标签: javascript jquery json

在计算元素数量方面似乎有很多类似问题,但我没有用我的问题来实现它们。

在jquery ajax之后,我得到了返回的JSON数据,看起来像这样

Object {0: Object, 1: Object , xxxx:"asdf" ,yyyy:"asdf", zzzz:"asdf"}

我希望在这些{}大括号之间获得对象的数量(不包括那些xxx,yyy元素)

我尝试.length无效

我也试过使用这个Length of a JavaScript object但是返回每个对象中的元素数量。我只想要对象的数量

谢谢

4 个答案:

答案 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