22

情况

我有一个返回的 JSON 对象。下面是一个例子。在who此特定示例中,可以更改为所需的任何属性名称。所以例如下一次这将是name而不是who

 [{"who":"Arthur"},{"who":"Craig"},{"who":"Dan"},{"who":"Daniel"},{"who":"Frank"},{"who":"Ian"},{"who":"jamie"},{"who":"Jason"},{"who":"jaz"},{"who":"Liam"},{"who":"Paul"},{"who":"Shaun"},{"who":"Wayne"}]

问题

在我的 JS 中,我需要能够在不使用其名称的情况下引用属性并访问其数据,因为名称总是不同的。

我试过的

data.forEach(function(m){
    console.info(m); // Object { who="Craig"}
    console.info(m.who); // Craig, as expected
    console.info(m[0]); // now not sure who to get it if who changes to name
});
4

3 回答 3

48

Object.keys(m)[0]应该返回对象中的第一个可枚举属性名称m

所以如果m = {"who": "Arthur"};那么m[Object.keys(m)[0]]"Arthur"

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys


或者:Object.values(m)[0]。请参见Object.values

于 2013-05-15T23:13:41.683 回答
5

您还可以使用for in循环:

data.forEach( function ( m ) {
    
  for ( const key in m ) {

    console.log( key ); // "who"
    console.log( m[key] ); // "Arthur"

  }

});

以上内容也适用key: value于您的对象中的多对,即:

[ {"who": "Arthur", "who": "Fred"}, {"who": "Craig"}, ]
于 2013-10-02T14:00:52.033 回答
2

如果你总是期望这些对象只有一个属性,你可以这样做:

var name, person;
for (person in data) {
    for (name in data[person]) {
        console.log(data[person][name]);
    }
}

这将枚举数据中每个人的每个属性。因为每个人只有一个属性(我假设),所以它只会枚举该属性并停止,允许您使用该属性而不管其名称如何。

于 2013-05-15T23:18:14.750 回答