使用字符串

时间:2017-11-21 22:15:33

标签: javascript arrays json

我有一个基本的json问题让我头疼几个小时,我试图使用字符串数组动态地将键添加到Json对象。

这是我的字符串数组:

let key =  ['session', 'view_state', 'footer', 'config', 'items'] 

我有另一个变量jsonValue并且是我的整个json对象。我想最终选择其中一个选项:

jsonValue.session.view_state.footer.config.items
jsonValue['session']['view_state']['footer']['config']['items']

这是我使用forEach的最佳尝试。

forEach(jsonKeys, (el) => {
  jsonCollection += jsonCollection !== undefined ? '."' +[el + '"'] : [ '"' + el + '"' ];
})

但我有这个结果:

undefined"session"."view_state"."footer"."config"."items"

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

使用键阵列获取值

使用Array#reduce迭代,检查当前值的类型,如果它是一个对象,则返回键的值,如果不是,则返回undefined



const obj = {
  "demo": true,
  "session": {
    "view_state": {
      "footer": {
        "config": {
          "items": [
            1,
            2
          ]
        }
      }
    }
  }
};

const keys =  ['session', 'view_state', 'footer', 'config', 'items'];

const value = keys.reduce((val, key) => val && typeof val === 'object' ?
  val[key] : undefind, obj);

console.log(value);




使用keys数组

添加值

使用Array#reduceRight创建具有所需值的对象链。使用Object#assign更新原始对象的结果:



const keys =  ['session', 'view_state', 'footer', 'config', 'items'];

const obj = { demo: true };

Object.assign(obj, keys.reduceRight((val, key) => ({ [key]: val }), [1, 2])); // replace [1, 2] with the actual items

console.log(obj);