关于javascript:如何获取对象长度

How to get object length

本问题已经有最佳答案,请猛点这里访问。

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

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

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

有一个相关的问题(JSON对象的长度)-在选择的答案中,用户建议将对象转换为数组,这对于我的任务来说并不太合适。


对于支持object.keys()的浏览器,只需执行以下操作:

1
Object.keys(a).length;

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

1
2
3
4
5
6
7
8
var count = 0;
var i;

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

hasOwnProperty的存在是为了确保只计算对象文本中的属性,而不是它从原型中"继承"的属性。


应该这样做:

1
Object.keys(a).length

但是,IE8及以下版本、Opera及FF 3.6及以下版本不支持Object.keys

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


使用$.map()可以轻松完成:

1
var len = $.map(a, function(n, i) { return i; }).length;


您看过underline.js(http://underlinejs.org/docs/underline.html)吗?它是一个实用程序库,有很多有用的方法。有一个集合size方法,还有一个toarray方法,可以满足您的需要。

1
2
_.size({one : 1, two : 2, three : 3});
=> 3


总而言之,这里是一个通用函数(包括IE8支持):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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


在jquery中,我是这样做的:

1
2
3
4
5
6
7
len = function(obj) {
    var L=0;
    $.each(obj, function(i, elem) {
        L++;
    });
    return L;
}


因此,不必查找和替换object.keys方法,另一种方法是在脚本执行的早期使用此代码:

1
2
3
4
5
6
7
8
9
10
if(!Object.keys)
{
  Object.keys = function(obj)
  {
    return $.map(obj, function(v, k)
    {
      return k;
    });
  };
 }


这是一个jquery-ised函数,可以随时使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$.extend({
    keyCount : function(o) {
        if(typeof o =="object") {
            var i, count = 0;
            for(i in o) {
                if(o.hasOwnProperty(i)) {
                    count++;
                }
            }
            return count;
        } else {
            return false;
        }
    }
});

可以这样称呼:

1
var cnt = $.keyCount({"foo" :"bar"}); //cnt = 1;

还有一个答案:

1
2
3
var j = '[{"uid":"1","name":"Bingo Boy","profile_img":"funtimes.jpg
<div class="suo-content">[collapse title=""]<ul><li>你复制了公认的答案…5年后。</li></ul>[/collapse]</div><hr><P>对于来这里查找已经是jquery对象的项计数的用户:.长度是您想要的:</P><P>例子:</P>[cc lang="javascript"]len = $('
#divID').length;
alert(len);


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();


也可以这样做:

1
Object.entries(obj).length

例如:

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


You might have an undefined property in the object.
If using the method of Object.keys(data).length is used those properties will also be counted.

You might want to filter them out out.

1
Object.keys(data).filter((v) => {return data[v] !== undefined}).length

You could add another name:value pair of length, and increment/decrement it appropriately. This way, when you need to query the length, you don't have to iterate through the entire objects properties every time, and you don't have to rely on a specific browser or library. It all depends on your goal, of course.


你可以使用像lodash lib和tolength(object)这样的东西,它应该给你对象的长度。