如何获得对象的长度

2020/10/05 04:21 · javascript ·  · 0评论

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

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

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

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

对于支持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是有确保你只从字面对象计数的属性,而不是从它的原型属性是“继承”。

应该这样做:

Object.keys(a).length

但是,Object.keysIE8和更低版本,Opera和FF 3.6和更低版本不支持。

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

可以轻松完成$.map()

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

您是否看过underscore.jshttp://underscorejs.org/docs/underscore.html)?这是一个具有许多有用方法的实用程序库。有一个收集size方法以及一个toArray方法,可能会为您提供所需的东西。

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

概括起来,这是一个通用功能(包括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

在jQuery中,我采用了以下方式:

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

因此,不必找到并替换Object.keys方法,另一种方法是在脚本执行的早期就执行以下代码:

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

这是Innuendo的答案的jQuery版本,可以使用。

$.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;
        }
    }
});

可以这样称呼:

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

还有一个答案:

var j = '[{"uid":"1","name":"Bingo Boy", "profile_img":"funtimes.jpg"},{"uid":"2","name":"Johnny Apples", "profile_img":"badtime.jpg"}]';

obj = Object.keys(j).length;
console.log(obj)

对于那些来这里查找已经是jQuery对象的项目的项目计数

.length是您要寻找的内容:

例:

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

也可以通过这种方式完成:

Object.entries(obj).length

例如:

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

如果要避免新的依赖关系,可以制作自己的智能对象。当然,只有您想做更多的事情,才可以得到它的大小。

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.keys(data).length则这些属性也将被计算在内。

您可能要过滤掉它们。

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

您可以使用类似Lodash的lib和_.toLength(object)之类的东西来给您对象的长度

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

本文地址:http://javascript.askforanswer.com/ruhehuodeduixiangdechangdu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!