代码之家  ›  专栏  ›  技术社区  ›  Aessandro

使用动态属性键访问对象属性

  •  1
  • Aessandro  · 技术社区  · 6 年前

    我需要从嵌套对象访问“isTouched”属性。挑战在于,这处房产可以这样展示:

    form: { CHANGES: { isTouched: true/false } }
    

    form: { 'formName': { isTouched: true/false } }
    

    访问第一个将非常简单:

    form.CHANGES.isTouched
    

    然而,我希望有一种方法能够满足这两种情况,同时考虑到表单名称将根据所使用的任何表单而改变。

    我曾想过收集所有的表单名称并循环使用它们,但我认为这不是很有效。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Aquarthur    6 年前

    我不是百分之百理解这个问题,但这样的东西对你有用吗?

    k = Object.keys(form)[0]
    form[k].isTouched
    
        2
  •  1
  •   Mamun    6 年前

    你可以用 Object.keys() 这将为您提供一个对象自身属性名称的数组。然后,您可以使用索引访问第一个对象名:

    var form = { 'formName': { isTouched: true/false } }
    var o = Object.keys(form)[0];
    console.log(form[o].isTouched);
        3
  •  0
  •   Andriy Ivaneyko    6 年前

    给你:

    /**
    * Returns the value of the isTouched property from provided object.
    * If formName specified, the value will be retrieved from the o[formName] sub object, otherwise from the default sub object accessed by key CHANGES
    */
    function getIsTouched(o, formName){
        return o[formName] ? o[formName].isTouched : o.CHANGES.isTouched
    }