我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
当前回答
此方法在数组中获取对象的所有属性名称,因此可以获得该数组的长度,该长度等于对象的键的长度。
Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
其他回答
vendor = {1: "", 2: ""}
const keysArray = Object.keys(vendor)
const objectLength = keysArray.length
console.log(objectLength)
Result 2
该解决方案适用于多种情况和跨浏览器:
Code
var getTotal = function(collection) {
var length = collection['length'];
var isArrayObject = typeof length == 'number' && length >= 0 && length <= Math.pow(2,53) - 1; // Number.MAX_SAFE_INTEGER
if(isArrayObject) {
return collection['length'];
}
i= 0;
for(var key in collection) {
if (collection.hasOwnProperty(key)) {
i++;
}
}
return i;
};
数据示例:
// case 1
var a = new Object();
a["firstname"] = "Gareth";
a["lastname"] = "Simpson";
a["age"] = 21;
//case 2
var b = [1,2,3];
// case 3
var c = {};
c[0] = 1;
c.two = 2;
用法
getLength(a); // 3
getLength(b); // 3
getLength(c); // 2
这里有一个不同版本的詹姆斯·科根的答案。不要传递参数,只需将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/
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length
更新:如果您使用Undercore.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;
};