JavaScript对象的长度

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

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
宝儿猪猪西门2020/03/09 17:59:08

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

Object.size = (obj) ->
  size = 0
  size++ for own key of obj
  size
老丝镜风2020/03/09 17:59:08

我们可以使用找到对象的长度:

Object.values(myObject).length
西里Jim2020/03/09 17:59:08

您始终Object.getOwnPropertyNames(myObject).length可以得到与[].length普通阵列相同的结果

SamStafan2020/03/09 17:59:08

使用Object.keys(myObject).length获取的对象/数组的长度

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

console.log(Object.keys(myObject).length); //3
LEY蛋蛋Near2020/03/09 17:59:08

这是詹姆斯·科根(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/

JinJin村村2020/03/09 17:59:08

上面的一些变化是:

var objLength = function(obj){    
    var key,len=0;
    for(key in obj){
        len += Number( obj.hasOwnProperty(key) );
    }
    return len;
};

集成hasOwnProp的方式更优雅。

Davaid前端神奇2020/03/09 17:59:08

最简单的方法是这样的

Object.keys(myobject).length

其中myobject是您想要的长度的对象

樱泡芙2020/03/09 17:59:08
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
  1. Object.values(myObject).length
  2. Object.entries(myObject).length
  3. Object.keys(myObject).length
西门村村古一2020/03/09 17:59:08

如果您不关心支持Internet Explorer 8或更低版本,则可以通过执行以下两个步骤来轻松获取对象中的属性数:

  1. 运行Object.keys()以获取仅包含那些可枚举的属性名称的数组,或者Object.getOwnPropertyNames()如果您还希望包含不可枚举的属性的名称,请运行该数组
  2. 获取该.length数组属性。

如果您需要多次执行此操作,则可以将此逻辑包装在函数中:

function size(obj, enumerablesOnly) {
    return enumerablesOnly === false ?
        Object.getOwnPropertyNames(obj).length :
        Object.keys(obj).length;
}

如何使用此特定功能:

var myObj = Object.create({}, {
    getFoo: {},
    setFoo: {}
});
myObj.Foo = 12;

var myArr = [1,2,5,4,8,15];

console.log(size(myObj));        // Output : 1
console.log(size(myObj, true));  // Output : 1
console.log(size(myObj, false)); // Output : 3
console.log(size(myArr));        // Output : 6
console.log(size(myArr, true));  // Output : 6
console.log(size(myArr, false)); // Output : 7

另请参阅此小提琴以获取演示。

2020/03/09 17:59:07

如果我们有哈希

hash = {“ a”:“ b”,“ c”:“ d”};

我们可以使用键的长度(即哈希的长度)来获得长度:

keys(hash).length

小卤蛋Near小卤蛋2020/03/09 17:59:07

那这样的事情呢-

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--; }}
}
西门樱前端2020/03/09 17:59:07

如果您需要一个公开其大小的关联数据结构,则最好使用地图而不是对象。

const myMap = new Map();
myMap.set("firstname", "Gareth");
myMap.set("lastname", "Simpson");
myMap.set("age", 21);
myMap.size; // 3
泡芙村村Pro2020/03/09 17:59:07

<script>
myObj = {"key1" : "Hello", "key2" : "Goodbye"};
var size = Object.keys(myObj).length;
console.log(size);
</script>

<p id="myObj">The number of <b>keys</b> in <b>myObj</b> are: <script>document.write(size)</script></p>

这对我有用:

var size = Object.keys(myObj).length;
LEYEvaL2020/03/09 17:59:07

采用:

var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
obj = Object.keys(myArray).length;
console.log(obj)

樱猪猪2020/03/09 17:59:07

在某些情况下,最好将大小存储在单独的变量中。特别是,如果要在一处将一个元素添加到数组中,并且可以轻松增加大小。如果您需要经常检查尺寸,显然可以更快地工作。

老丝村村2020/03/09 17:59:07

这是一个完全不同的解决方案,仅适用于更现代的浏览器(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);
小小2020/03/09 17:59:07

只需使用它即可获得length

Object.keys(myObject).length
Chloe2020/03/09 17:59:07

这是并且不要忘记检查该属性是否不在原型链上的方法:

var element_count = 0;
for(var e in myArray)
    if(myArray.hasOwnProperty(e))
        element_count++;
Gil小哥伽罗2020/03/09 17:59:07

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

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方法,则length属性将是正确的。如果您担心自己或其他人忘记使用它,则也可以将其他人发布的属性计数器添加到length方法中。

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

Mandy宝儿2020/03/09 17:59:07

该方法将对象的所有属性名称存储在一个数组中,因此您可以获得该数组的长度,该长度等于对象的键的长度。

Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
LEY理查德2020/03/09 17:59:07

我不是JavaScript专家,但是由于Object没有length方法,因此您似乎必须遍历元素并计数它们:

var element_count = 0;
for (e in myArray) {  if (myArray.hasOwnProperty(e)) element_count++; }

@palmsey:为了公平起见,JavaScript文档实际上以这种方式显式地将使用Object类型的变量称为“关联数组”。

宝儿猿2020/03/09 17:59:07

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

这比接受的答案要好,因为它使用本机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;
小宇宙前端2020/03/09 17:59:07

更新:如果您正在使用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;
};
村村小小十三2020/03/09 17:59:07

如果您知道不必担心hasOwnProperty检查,则可以非常简单地执行此操作:

Object.keys(myArray).length