完成一个 safeGet 函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回 undefined,例如:
var data = {a:{b:{c:'aaa'}}}
safeGet(data,'a.b.c'); //'aaa'
safeGet(data,'a.b.c.d'); //undeifned
safeGet(data,'a.b.c.d.e.f'); //undeifned
答案:
1.普通方式遍历
function safeGet(obj,str){
let arr = str.split('.');
let temp = obj;
for(let i = 0;i<arr.length;i++){
let target = temp[arr[i]];
if(!target) return undefined;
if(i === arr.length-1){
return target;
}
temp = target;
}
}
2.reduce 方式
const safeGet = (o,path) =>{
try{
return path.split('.').reduce((pre,cur)=>pre[cur],o);
}catch(e){
return undefined;
}
}