是否有任何内置函数可以返回对象的长度?

例如,我有a = {'a':1,'b':2,'c':3},它应该返回3。如果我使用。length,它返回undefined。

它可以是一个简单的循环函数,但我想知道是否有内置函数?

还有一个相关的问题(JSON对象的长度)——在选择的答案中,用户建议将对象转换为数组,这对我的任务来说不是很舒服。


当前回答

您可以添加另一个名称:length值对,并适当地递增/递减它。这样,当需要查询长度时,就不必每次都遍历整个对象属性,也不必依赖于特定的浏览器或库。当然,这完全取决于你的目标。

其他回答

这应该做到:

Object.keys(a).length

然而,对象。在IE8及以下版本、Opera和FF 3.6及以下版本不支持。

现场演示:http://jsfiddle.net/simevidas/nN84h/

如果你想避免新的依赖,你可以创建自己的智能对象。当然,只有当你想做更多的事情时,才会得到它的大小。

MyNeatObj = function (obj) {
  var length = null;

  this.size = function () {
    if (length === null) {
      length = 0;
      for (var key in obj) length++;
    }
    return length;
  }
}

var thingy = new MyNeatObj(originalObj);
thingy.size();

也可以这样做:

Object.entries(obj).length

例如:

let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]

在jQuery中,我已经这样做了:

len = function(obj) {
    var L=0;
    $.each(obj, function(i, elem) {
        L++;
    });
    return L;
}

您可以添加另一个名称:length值对,并适当地递增/递减它。这样,当需要查询长度时,就不必每次都遍历整个对象属性,也不必依赖于特定的浏览器或库。当然,这完全取决于你的目标。