【问题标题】:Read a value of an object by its parent's index通过其父索引读取对象的值
【发布时间】:2021-05-30 09:02:04
【问题描述】:

假设我有这个 json:

"myObject" : {
  "trans": {
    "somekey": {
      "name": "i want this value"
    }
  }
}

如何在不知道“somekey”名称的情况下访问“我想要这个值”?

看完this,我明白了可以通过索引来完成:

myObject.trans[0].name

但我收到了undefind。这是为什么呢?

【问题讨论】:

  • “trans”对象中是否始终只有一个键?
  • myObject.trans[0] 表示您正在尝试获取数组中的第一项,但 myObject.trans 是一个对象。您无法获得对象的“第一个”键,因为在该上下文中这是一个没有意义的术语。
  • 因为trans 不是数组而是对象。对象没有索引,它们有键。
  • @derpirscher 好的,所以说我不知道​​“someKey”的名称,但仍然想要“name”的值,我知道它是第一个,我该怎么办?跨度>
  • 提示:{ x: {y : ...} } 转换为 x.y,而 { x: [ { y: ... } ] } 转换为 x[0].y。注意{ -> .[ -> [n]。您也可以使用 x['y'] 而不是 x.y 但这就是因为对象也允许使用这种表示法。

标签: javascript arrays json object


【解决方案1】:

如果您不确定密钥,请使用Array。这样您就可以在不知道索引或键的情况下使用.find() 方法查找元素。

var myObject = {
  "trans": [{
    "name": "i want this value"
  }]
}

console.log(
  myObject.trans.find(item => item.name === "i want this value").name
)

【讨论】:

  • 嗯,据我了解,"i want this value" 的值尚不清楚。那么如何在搜索中使用它呢?
  • 如何在不知道“somekey”名称的情况下访问“我想要这个值” @derpirscher 你问如何在不知道的情况下访问“一些关键”。由于您从未提到“我想要这个值”是未知的,所以我建议使用 Array 方法。
  • 首先,我不是OP。第二:如果某人已经知道该值,为什么还要在数组中搜索该值?看起来很明显,OP 想要在不知道密钥 somekey 的情况下获得 myobject.trans.somekey.name 的(但未知的)值
【解决方案2】:

您可以使用Object.keys 返回一个对象键列表。然后,您可以使用此键数组从父对象中选择名称键。

const myObject = {
      "trans" : {
        "somekey" : {
          "name" : "i want this value"
        }
      }
    };

const transKeys = Object.keys(myObject.trans);
const nameValue = myObject.trans[transKeys[0]].name;

console.log(nameValue);

注意 - 这仅在您确定 trans 将只有一个孩子并且该孩子将始终拥有属性 name 时才有效。如果trans 包含多个可能包含或不包含名称的属性,您可以使用键数组来遍历每个属性。

【讨论】:

    【解决方案3】:

    如果您无法更改对象外观的结构,我建议您这样做:

    let myObject =   {
        "trans": {
            "somekey": {
                "name": "i want this value"
          }
        }
    }
    
    let finalValue;
    
    Object.values(myObject.trans).forEach(val=>{
        if(val.name){
            finalValue = val.name;
        }
    })
    
    console.log(finalValue)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2021-12-25
      • 2013-10-07
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多