不知道 JavaScript 对象属性名称如何访问该属性?

24

情况

我有一个返回的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
});

1
你在寻找 m['who'] 吗? - Rick Viscomi
确实,这就是我可以返回 who 的方式。但我需要能够返回一个字符串。所以 m['*'] 有效。我不知道属性的名称。 - Jamie Hutber
明白了,答案已添加。 - Rick Viscomi
有人知道是否可以使用jpath查询实现这个吗? - andrewm4894
3个回答

55

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"}, ]

2
如果您总是期望这些对象只有一个属性,您可以像这样操作:
var name, person;
for (person in data) {
    for (name in data[person]) {
        console.log(data[person][name]);
    }
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接