【问题标题】:Accessing a JavaScript's object property without knowing that property name在不知道属性名称的情况下访问 JavaScript 的对象属性
【发布时间】:2013-05-10 16:45:39
【问题描述】:

情况

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

【问题讨论】:

  • 您在寻找m['who']吗?
  • 确实,这就是我可以返回谁的方式。但我需要能够返回一个字符串。所以 m['*'] 有效。我不知道该物业的名称。
  • 明白了,已添加答案。
  • 有谁知道这是否可以使用 jpath 查询?

标签: javascript object properties


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您也可以使用for in 循环:

    data.forEach( function ( m ) {
    
      for ( var key in m ) {
    
        console.log( key ); // "who"
        console.log( m[key] ); // "Arthur"
    
      }
    
    });
    

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

    [ {"who":"Arthur","who":"Fred"} ]
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 2021-01-27
        • 2018-06-25
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多