我最近发现在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'},或者此对象上存在的与其数组方面无关的所有道具的列表。
或者这只是一个超级黑客的想法,我不应该首先这样做?
谢谢!
答案 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)