如何计算 JavaScript 数组对象?

20

当我有一个像这样的 JavaScript 对象:

var member = {
    "mother": {
        "name" : "Mary",
        "age" : "48"
    },
    "father": {
        "name" : "Bill",
        "age" : "50"
    },
    "brother": {
        "name" : "Alex",
        "age" : "28"
    }
}

如何计算此对象中的对象数量?!
我的意思是如何得到结果3,因为里面只有3个对象:母亲、父亲、兄弟?!

如果它不是数组,那么如何将其转换为JSON数组?


可能是 https://dev59.com/QXVD5IYBdhLWcg3wWaVh 的重复问题。 - Eli Courtwright
有人想把它改成读取对象而不是数组吗? - Jeremy L
8个回答

32

那不是一个数组,而是一个对象字面量,你应该迭代对象的自身属性并计数,例如:

function objectLength(obj) {
  var result = 0;
  for(var prop in obj) {
    if (obj.hasOwnProperty(prop)) {
    // or Object.prototype.hasOwnProperty.call(obj, prop)
      result++;
    }
  }
  return result;
}

objectLength(member); // for your example, 3

应使用hasOwnProperty方法来避免迭代继承的属性,例如:

var obj = {};
typeof obj.toString; // "function"
obj.hasOwnProperty('toString'); // false, since it's inherited

在迭代对象之前,最好检查Mozilla的__count__属性... - James
2
@J-P:“__count__”在Gecko 1.9.3中被标记为过时(在Gecko 1.9.3a5pre(Firefox 3.7a5pre),它不再存在) - Christian C. Salvadó
2
@J-P,在迭代之前你可以检查一下新的 ECMAScript 5 版本 Object.keys 方法是否存在,ES5 已经开始被所有主要浏览器厂商实现了,可以像这样做:if (typeof Object.keys === "function") return Object.keys(obj).length; - Christian C. Salvadó
我觉得这有点过了。如果他只是在计算 JSON 中属性的数量,那么依赖于 Object.keys(memebers) 应该就足够了。 - Frederico
最终的解决方案是“内部”方法,而不是查询文档。 - J A S K I E R

30

你可以尝试这段代码,它在浏览器中运行得非常完美:

Object.keys(member).length;

19

如果您在页面中使用了jQuery,那么这将起作用:

$(member).toArray().length;

7
您可以使用Object.keys()方法,该方法返回一个给定对象的可枚举属性数组:
Object.keys(member).length;

似乎与早期的答案完全相同。 - Dale K

6

这不是一个数组,而是一个对象字面量。

您可以迭代对象属性并计算它拥有多少个:

var count = 0;
for (var k in obj) {
  // if the object has this property and it isn't a property
  // further up the prototype chain
  if (obj.hasOwnProperty(k)) count++;
}

4
var member = {
        "mother": {
            "name" : "Mary",
            "age" : "48"
        },
        "father": {
            "name" : "Bill",
            "age" : "50"
        },
        "brother": {
            "name" : "Alex",
            "age" : "28"
        }
    }
    console.log('member key size:' + Object.keys(member).length);

ref a good guy : https://dev59.com/QXVD5IYBdhLWcg3wWaVh

1

这是我会做的方式

function getObjectLength( obj )
{
  var length = 0;
  for ( var p in obj )
  {
    if ( obj.hasOwnProperty( p ) )
    {
      length++;
    }
  }
  return length;
}

0

在我的实践中,我是这样工作的:

/*
*   $.count(array) -  Returns the number of elements in an array (immproved equivalent to .length property). 
*/
$.count = function (array){
    if(array.length)
        return array.length;
    else
    {
        var length = 0;
        for ( var p in array ){if(array.hasOwnProperty(p)) length++;};
        return length;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接