【问题标题】:Access dynamic nested key in JS object访问 JS 对象中的动态嵌套键
【发布时间】:2020-05-04 20:20:51
【问题描述】:

我有一个类似['animals', 'cats', 'cute', 'fast', 'small', ...] 的数组,并且想要访问对象的嵌套键,例如

let object = {
  one: {
    two: {
      three: {
        // and so on
      }
    }
  }
}

通常我会写object['animals']['cats']['cute']['fast']['small']..

问题是键和级别的数量是动态的(所以我可以获得具有 2 个嵌套级别或 50 个的对象),所以我不知道如何完成

提前感谢您的帮助

【问题讨论】:

  • 哪一部分是已知的,你想从对象中提取的key,还是对象本身的结构?
  • @MichaelRodriguez 在编写代码时 - 什么都没有,在脚本运行时 - 一切(有多少级别,每个级别上有什么键,当然我可以访问该对象)

标签: javascript arrays object nested nested-documents


【解决方案1】:

使用.reduce 遍历键数组,其中累加器是当前嵌套对象:

let object = {
  one: {
    two: {
      three: {
        prop: 'val'
      }
    }
  }
};

const props = ['one', 'two', 'three', 'prop'];
const nestedVal = props.reduce((a, prop) => a[prop], object);
console.log(nestedVal);

要在同一点赋值,首先弹出最后一个键,使用相同的reduce 技巧获取最后一个对象,并使用括号表示法分配给最后一个键的属性:

let object = {
  one: {
    two: {
      three: {
        prop: 'val'
      }
    }
  }
};

const props = ['one', 'two', 'three', 'prop'];
const lastKey = props.pop();
const nestedObj = props.reduce((a, prop) => a[prop], object);
nestedObj[lastKey] = 'newVal';
console.log(object);

【讨论】:

  • 有没有办法给这样的嵌套文档赋值?
  • 很相似,只是.pop()先关闭最后一个键,然后在拥有嵌套对象后使用它分配给属性
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2019-10-06
  • 2018-03-14
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多