如以下例子:
给定一个这种结构的对象obj,想通过循环取出它里面属性的值,平时我们都直接用obj.a或者obj["a"]这2种形式去取。但是我现在想给定一个字符串,比如"a.a3.a3_1"这种,然后想通过循环遍历去获取对应的值,js中该怎么写?不清楚怎么更好的把这个字符串拼接成属性去取,我想写一个通用的方法的。
const obj = {
a: {
a1: 1,
a2: 2,
a3: {
a3_1: "a3_1"
}
},
b: {
b1: {
b1_1: "b1_1"
},
b2: {
b2_1: "b2_1"
},
b3: 3
}
}
这是我自己笨方法实现的,不知道会不会出问题,哈哈
const propertyStr= "a.a3.a3_1";
const properties = propertyStr.split(".");
let result = obj;
properties.map(cur => {
result = result[cur];
});
console.log(result); // a3_1
可以自己写,也可以考虑使用现成的库,比如loadsh直接支持这种写法。
异常处理,第三个参数给定如果异常情况下的默认值
不过要注意的两点:
1.使用lodash这种方法会自动容错,也就是如果obj下的a根本就不存在,最终也会返回一个undefined,不会抛出错误。
2.第三个参数给定默认值的情况针对null无效,也就是说如果a3_1的值是null,那么不会设定默认值,只有undefined才会设定默认值0。
Ps:如果自己写可以参考loadash的源码,将更多因素考虑进去
https://zhuanlan.zhihu.com/p/...