0

似乎已经有很多关于计算元素数量的类似问题被问到了,但我没有用我的问题来实现它们。

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

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

我想得到这个 {} 大括号之间的对象数(不包括那些 xxx,yyy 元素)

我试过.length哪个不起作用

我也尝试使用这个JavaScript 对象的长度,但它返回每个对象中元素的数量。我只想要对象的数量

谢谢你

4

4 回答 4

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(值得一读)。还有其他方法可以做到这一点,但这似乎是最直接的。

于 2012-12-15T06:24:14.300 回答
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运算符就会返回false.hasOwnProperty()如果您愿意,请随意使用。

显然,这是一个专门的解决方案,根本不测试不同属性的类型。(要实际测试该类型,请参阅 elclanrs 的解决方案 - 无论哪种方式,请阅读他链接到的页面。)

于 2012-12-15T06:31:44.107 回答
0

假设整个 json 在一个名为的变量中json

var total_objects = 0;
$.each(json, function () {
   if (typeof this == 'object') {
      total_objects++;
   }
});

但是,我很好奇您为什么需要知道这一点。

于 2012-12-15T06:10:09.090 回答
0

您可以使用此问题Javascript 对象长度(即关联数组)的代码中的自定义版本,并使用运算符检查元素的类型typeof并仅计算那些是object(或array)的元素。

Object.sizeObj = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (typeof key[obj] === 'object' && obj.hasOwnProperty(key)) size++;
    }
    return size;
};

// Get the count of those elements which are an object
var objectsCount = Object.sizeObj(myArray);
于 2012-12-15T06:31:57.273 回答