JavaScript对象的长度

巧了我就是萌 提交于 2019-12-06 10:31:04

我有一个JavaScript对象,是否有内置的或公认的最佳实践方法来获取此对象的长度?

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

#1楼

更新 :如果您使用的是Underscore.js (建议使用,它是轻量级的!),那么您可以

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

如果不是 ,并且您不想由于任何原因弄乱Object属性,并且已经在使用jQuery,那么同样可以访问一个插件:

$.assocArraySize = function(obj) {
    // http://stackoverflow.com/a/6700/11236
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

#2楼

以下是James Coglan在CoffeeScript中针对那些放弃了直接JavaScript的人的答案:)

Object.size = (obj) ->
  size = 0
  size++ for own key of obj
  size

#3楼

这是詹姆斯·科根(James Cogan)答案的不同版本。 无需传递参数,只需原型化Object类,并使代码更简洁。

Object.prototype.size = function () {
    var size = 0,
        key;
    for (key in this) {
        if (this.hasOwnProperty(key)) size++;
    }
    return size;
};

var x = {
    one: 1,
    two: 2,
    three: 3
};

x.size() === 3;

jsfiddle示例: http : //jsfiddle.net/qar4j/1/


#4楼

这是一个完全不同的解决方案,仅适用于更现代的浏览器(IE9 +,Chrome,Firefox 4 +,Opera 11.60 +,Safari 5.1+)

jsFiddle

设置您的关联数组类

/**
 * @constructor
 */
AssociativeArray = function () {};

// Make the length property work
Object.defineProperty(AssociativeArray.prototype, "length", {
    get: function () {
        var count = 0;
        for (var key in this) {
            if (this.hasOwnProperty(key))
                count++;
        }
        return count;
    }
});

现在,您可以按以下方式使用此代码...

var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);

#5楼

这是最跨浏览器的解决方案。

这比接受的答案要好,因为它使用本机Object.keys(如果存在)。 因此,它是所有现代浏览器中最快的。

if (!Object.keys) {
    Object.keys = function (obj) {
        var arr = [],
            key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                arr.push(key);
            }
        }
        return arr;
    };
}

Object.keys(obj).length;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!