我有一个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