我有一个基本的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"
任何帮助将不胜感激!
答案 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);