我有一个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;
当前回答
vendor = {1: "", 2: ""}
const keysArray = Object.keys(vendor)
const objectLength = keysArray.length
console.log(objectLength)
Result 2
其他回答
以下是James Coglan在CoffeeScript中为那些放弃直接JavaScript的人提供的答案:)
Object.size = (obj) ->
size = 0
size++ for own key of obj
size
在某些情况下,最好将大小存储在单独的变量中。特别是,如果要在一个位置添加一个元素到数组中,并且可以很容易地增加大小。如果你需要经常检查尺寸的话,这显然会更快。
在这里,您可以给出任何类型的可变数组、对象、字符串
function length2(obj){
if (typeof obj==='object' && obj!== null){return Object.keys(obj).length;}
//if (Array.isArray){return obj.length;}
return obj.length;
}
在对象继承的情况下,Object.keys不会返回正确的结果。要正确计算对象财产,包括继承的属性,请使用for-in。例如,通过以下函数(相关问题):
var objLength = (o,i=0) => { for(p in o) i++; return i }
var myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;var child=对象.create(myObject);child[“sex”]=“男性”;var objLength=(o,i=0)=>{for(p in o)i++;return i}console.log(“Object.keys(myObject):”,Object.keyes(myObject).length,“(OK)”);console.log(“Object.keys(child):”,Object.keyes(child).length,“(错误)”);console.log(“objLength(child):”,objLength“child),”(OK)“);
使用ECMAScript 6内置Reflect对象,您可以轻松计算对象的财产:
Reflect.ownKeys(targetObject).length
它将为您提供目标对象自身财产的长度(重要)。
Reflect.ownKeys(target)
返回目标对象自身(非继承)属性的数组钥匙。
那是什么意思?为了解释这一点,让我们看看这个例子。
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.getIntro= function() {
return `${this.name} is ${this.age} years old!!`
}
let student = new Person('Anuj', 11);
console.log(Reflect.ownKeys(student).length) // 2
console.log(student.getIntro()) // Anuj is 11 years old!!
您可以在这里看到,当对象仍然从其父对象继承属性时,它只返回了自己的财产。
有关更多信息,请参阅:Reflect API