【问题标题】:Accessing something inside the object when you don't know the key [duplicate]当您不知道密钥时访问对象内部的某些内容[重复]
【发布时间】:2019-07-26 11:35:27
【问题描述】:

我得到一个关注对象

{
  IuW1zvaSABwH4q: {
    label: 'Random Image of TypeScript not relavent to coworking',
    thumbId: 'd501-f-b601-c8b1-4bd995e',
    schemaType: 'xman-assets-image-set'
  }
}

现在,我想访问其中的 thumbID 的值,即 d501-f-b601-c8b1-4bd995e

但是我的根键似乎是动态/随机的(IuW1zvaSABwH4q),我怎样才能访问其中的值?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我尝试解构它 let { thumbID } = thePlaceIamStoringMyObject 但没有奏效
  • 编辑您的问题并添加您尝试过的内容和遇到的错误

标签: javascript


【解决方案1】:

您可以从对象中获取值,然后访问所需的键。

let obj =  {
    IuW1zvaSABwH4q: 
      {
        label: 'Random Image of TypeScript not relavent to coworking', 
        thumbId: 'd501-f-b601-c8b1-4bd995e',
        schemaType: 'xman-assets-image-set' 
      } 
    }
    
let op = Object.values(obj)[0].thumbId

console.log(op)

【讨论】:

  • @brk 关键是IuW1zvaSABwH4q: 未知,thumID 在我得到的对象中是一致的
  • 我认为 OP 指的是 IuW1zvaSABwH4q 键,而不是 thumbId
  • 我的错误对不起
【解决方案2】:

假设只有一个属性,您可以通过第一个属性访问它。

const obj = { IuW1zvaSABwH4q: 
      { label: 'Random Image of TypeScript not relavent to coworking', thumbId: 'd501-f-b601-c8b1-4bd995e', schemaType: 'xman-assets-image-set' 
       } 
    };
    
console.log(obj[Object.getOwnPropertyNames(obj)[0]].thumbId);

【讨论】:

  • 当您使用 getOwnPropertyNames 时,您不能假设只有一个属性,因为它返回可枚举和不可枚举的属性,并且根据文档,可枚举和不可枚举之间的排序属性未定义。
  • 假设是基于提供的测试数据。
  • 像文档说的那样使用Object.keys,您就不必担心了。
【解决方案3】:

您可以使用 Array.map 进行转换,使用 Array.forEach 获取并在控制台中打印。

const obj = {
    IuW1zvaSABwH4q: {
        label: 'Random Image of TypeScript not relavent to coworking',
        thumbId: 'd501-f-b601-c8b1-4bd995e',
        schemaType: 'xman-assets-image-set'
    },
    YuW1zvaSABwH7q: {
        label: 'Random Image of TypeScript not relavent to coworking',
        thumbId: 'as90-f-b601-c8b1-4bd9958', 
        schemaType: 'xman-assets-image-set'
    }
};
//for one object
console.log(Object.values(obj)[0].thumbId);
//multiple unknown keys
Object.values(obj).map(ele => ele.thumbId).forEach(th=> console.log(th));

【讨论】:

    【解决方案4】:

    您可以使用for..in 来迭代对象,然后检查该对象是否具有名称为thumbId 的键。如果对象没有thumbId 键,此检查将确保代码不会抛出错误

    let obj = {
      IuW1zvaSABwH4q: {
        label: 'Random Image of TypeScript not relavent to coworking',
        thumbId: 'd501-f-b601-c8b1-4bd995e',
        schemaType: 'xman-assets-image-set'
      }
    }
    
    
    for (let keys in obj) {
      if (obj[keys].hasOwnProperty('thumbId')) {
        console.log(obj[keys].thumbId);
      }
    }

    【讨论】:

      【解决方案5】:

      试试

      Object.entries(obj)[0][1].thumbId
      

      const obj= {
        IuW1zvaSABwH4q: {
          label: 'Random Image of TypeScript not relavent to coworking',
          thumbId: 'd501-f-b601-c8b1-4bd995e',
          schemaType: 'xman-assets-image-set'
        }
      }
      
      //for(let o in obj) console.log(obj[o].thumbId);
      
      let t=Object.entries(obj)[0][1].thumbId;
      
      console.log(t);

      【讨论】:

        【解决方案6】:

        使用组合的另一种方式

        JSON.stringify()split()

        const obj = {
          IuW1zvaSABwH4q: {
            label: 'Random Image of TypeScript not relavent to coworking',
            thumbId: 'd501-f-b601-c8b1-4bd995e',
            schemaType: 'xman-assets-image-set'
          }
        }
        let thumbId = JSON.stringify(obj).split('"thumbId":')[1].split('"')[1].split('"')[0]
        console.log(thumbId)

        【讨论】:

          【解决方案7】:

          使用underscore

          let yourObject = {
            IuW1zvaSABwH4q: {
              label: 'Random Image of TypeScript not relavent to coworking',
              thumbId: 'd501-f-b601-c8b1-4bd995e',
              schemaType: 'xman-assets-image-set'
            }
          }
          
          _.pluck(_.values(yourObject),'thumbId');
          // ["d501-f-b601-c8b1-4bd995e"]
          

          您也可以使用_.first 安全地访问第一个数组元素

          【讨论】:

            【解决方案8】:

            var json = {
              IuW1zvaSABwH4q: {
                label: 'Random Image of TypeScript not relavent to coworking',
                thumbId: 'd501-f-b601-c8b1-4bd995e',
                schemaType: 'xman-assets-image-set'
              },
                IuW2zvaSABwH4q: {
                label: 'Random Image of TypeScript not relavent to coworking',
                thumbId: 'd501-f-b601-c8b1-4bd995e',
                schemaType: 'xman-assets-image-set'
              },
                IuW3zvaSABwH4q: {
                label: 'Random Image of TypeScript not relavent to coworking',
                thumbId: 'd501-f-b601-c8b1-4bd995e',
                schemaType: 'xman-assets-image-set'
              }
            }
            
            for (var key in json) {
              if (json[key]) {
                for (var x in json[key]) {
                  if (x === 'thumbId') console.log(json[key][x]);
                }
              }
            }

            我使用两个嵌套的 for 来提取 thumbId。

            【讨论】:

              猜你喜欢
              • 2021-12-10
              • 1970-01-01
              • 2012-09-02
              • 1970-01-01
              • 2021-12-08
              • 2019-08-21
              • 1970-01-01
              • 2020-02-26
              • 1970-01-01
              相关资源
              最近更新 更多