如何在JS循环中用动态变量i访问JSON.parse解析后的嵌套对象属性
解决方案
你可以通过JavaScript对象的方括号属性访问语法实现动态属性读取,方括号支持传入字符串表达式,直接拼接动态后缀即可。
核心修改只需将原代码的固定属性写法替换为动态拼接写法:
// 替换前 var Ob = obj.permissions[i-1].module_1.view_1; // 替换后(模板字符串写法,ES6+支持) var Ob = obj.permissions[i-1][`module_${i}`][`view_${i}`]; // 兼容低版本的字符串拼接写法 var Ob = obj.permissions[i-1]['module_' + i]['view_' + i];
修改后完整可运行代码
const data = '{"permissions": [{"module_1": {"view_1":"false","edit_1":"false","delete_1":"false","add_1":"false","search_1":"false"}},{"module_2": {"view_2":"false","edit_2":"false","delete_2":"false","add_2":"false","search_2":"false"}},{"module_3": {"view_3":"false","edit_3":"false","delete_3":"false","add_3":"false","search_3":"false"}},{"module_54": {"view_54":"false","edit_54":"false","delete_54":"false","add_54":"false","search_54":"false"}}],"count":"54"}'; const obj = JSON.parse(data); let Size = obj.count; for (let i=1; i <= Size ; i++) { // 动态读取对应属性 var Ob = obj.permissions[i-1][`module_${i}`][`view_${i}`]; console.log(Ob); }
原理说明
JavaScript对象支持两种属性访问方式:
- 点操作符:只能接固定的属性名,不能传入动态表达式
- 方括号操作符:可以传入任意字符串类型的表达式,运行时会将表达式的计算结果作为属性名读取对应值,刚好适配动态拼接属性名的场景
内容的提问来源于stack exchange,提问作者mjmi
相关产品推荐
相关产品推荐

