如何访问数组的对象属性

时间:2017-11-17 20:33:17

标签: javascript arrays object

我最近发现在Chrome控制台中我能够做一些非常不寻常的事情。

这是一个使用对象数组的简单示例。

g = [{age: 23}, {age:33}]; 

g.foo = "bar"; 
> (2) [{…}, {…}, foo: "bar"]

我想我能做到这一点,因为所有js数据结构都是对象?有没有办法可以访问foo:bar而不知道它是什么?

g = g.filter(function(e){
          return e.age !== 33;
          });

> (2) [{…}]

具体来说,我正在尝试过滤一个数组,而不会丢失我设置的对象属性,如foo:“bar”。

我回来的过滤后的数组不包含我以前的对象属性。

所以我的问题是当我以一种奇怪的方式将它视为一个对象时,访问我在数组对象上设置的属性的最佳方法是什么?

理想情况下,我可以运行某些内容(g)并返回{foo:'bar'},或者此对象上存在的与其数组方面无关的所有道具的列表。

或者这只是一个超级黑客的想法,我不应该首先这样做?

谢谢!

2 个答案:

答案 0 :(得分:-1)

您可以将Object.keys用于对象的自身可枚举键,即使对于数组也是如此。

虽然可以使用自己的属性,但这是不可取的,因为它可能会导致丢失一些属性,如果与JSON.stringify一起使用更多关于这里的劣势:Is it good practice to add properties on array in javascript(仍然基于意见)。



var g = [{ age: 23 }, { age: 33 }]; 
g.foo = "bar"; 

console.log(Object.keys(g));
console.log(JSON.stringify(g));




答案 1 :(得分:-1)

此代码获取对象中的所有枚举键:

 let g = [{age: 23}, {age:33}]; 

    g.foo = "bar"; 
    let keys = [];
    for(var x in g){
      keys.push(x);  
    }
    console.log(keys)

但是这段代码获取所有键(也来自原型),获取键的最佳方式 - 使用Object.keys(g)

如果你想获得没有原型的所有密钥:使用Object.getOwnPropertyNames(g)