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

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

当前回答

 vendor = {1: "", 2: ""}
 const keysArray = Object.keys(vendor)
 const objectLength = keysArray.length
 console.log(objectLength)
 Result 2

其他回答

像这样的怎么样--

function keyValuePairs() {
    this.length = 0;
    function add(key, value) { this[key] = value; this.length++; }
    function remove(key) { if (this.hasOwnProperty(key)) { delete this[key]; this.length--; }}
}

为了不干扰原型或其他代码,您可以构建和扩展自己的对象:

function Hash(){
    var length=0;
    this.add = function(key, val){
         if(this[key] == undefined)
         {
           length++;
         }
         this[key]=val;
    }; 
    this.length = function(){
        return length;
    };
}

myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2

如果始终使用add方法,长度属性将是正确的。如果你担心自己或其他人忘记使用它,你可以将其他人发布的属性计数器添加到长度方法中。

当然,您可以始终覆盖这些方法。但即使您这样做了,您的代码也可能会明显失败,从而易于调试

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

Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length

这里有一个不同版本的詹姆斯·科根的答案。不要传递参数,只需将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/

与大多数JavaScript问题一样,有许多解决方案。您可以扩展Object,无论好坏,它都可以像许多其他语言的字典(+一流公民)一样工作。这没什么错,但另一个选择是构造一个满足您特定需求的新对象。

function uberject(obj){
    this._count = 0;
    for(var param in obj){
        this[param] = obj[param];
        this._count++;
    }
}

uberject.prototype.getLength = function(){
    return this._count;
};

var foo = new uberject({bar:123,baz:456});
alert(foo.getLength());