我有一个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+)
设置您的关联数组类
/**
* @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;