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

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

当前回答

使用Object.entries方法获取长度是实现此目的的一种方法

const objectLength=obj=>Object.entries(obj).length;常量人={id:1,name:“John”,年龄:30岁}常量汽车={类型:2,颜色:“红色”,}console.log(对象长度(人));//3.console.log(objectLength(car));//2.

其他回答

像这样的怎么样--

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--; }}
}

在对象继承的情况下,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)“);

简单的解决方案:

  var myObject = {};      // ... your object goes here.

  var length = 0;

  for (var property in myObject) {
    if (myObject.hasOwnProperty(property)){
      length += 1;
    }
  };

  console.log(length);    // logs 0 in my example.

使用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

以下是如何并且不要忘记检查属性是否不在原型链上:

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