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

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

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

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


当前回答

还有一个答案:

var j = '[{“uid”:“1”,“名字”:“宾果男孩”、“profile_img”:“funtimes.jpg”},{“uid”:“2”,“名字”:“约翰尼苹果”,“profile_img”:“badtime.jpg”}]”; obj = Object.keys(j).length; console.log (obj)

其他回答

综上所述,这里有一个通用函数(包括ie8支持):

var objSize = function(obj) { var count = 0; if (typeof obj == "object") { if (Object.keys) { count = Object.keys(obj).length; } else if (window._) { count = _.keys(obj).length; } else if (window.$) { count = $.map(obj, function() { return 1; }).length; } else { for (var key in obj) if (obj.hasOwnProperty(key)) count++; } } return count; }; document.write(objSize({ a: 1, b: 2, c: 3 })); // 3

对于支持Object.keys()的浏览器,你可以简单地这样做:

Object.keys(a).length;

否则(特别是在IE < 9中),你可以自己用for (x in y)循环遍历对象:

var count = 0;
var i;

for (i in a) {
    if (a.hasOwnProperty(i)) {
        count++;
    }
}

hasOwnProperty的存在是为了确保你只计算来自对象字面量的属性,而不是它从原型“继承”的属性。

对于那些来这里查找已经是jQuery对象的项目计数的人: .length就是你想要的长度:

例子:

len = $('#divID').length;
alert(len);

所以我们不需要去寻找和替换对象。方法,另一种方法是在脚本执行的早期执行以下代码:

if(!Object.keys)
{
  Object.keys = function(obj)
  {
    return $.map(obj, function(v, k)
    {
      return k;
    });
  };
 }

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

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();