最近在项目里总是做数据兼容处理,比方说,正常可以从服务器拿到你要渲染的数据,但是服务器异常时,有可能后端传的数据不是太完整,你在业务组建里直接通过对象获取某一key的值的时候有可能会报undefined的错误,这时候就需要一个lodash的get去做兼容处理,也顺着业务写了一个小小的方法来实现lodash的get功能;
话不多说,直接写;
["a", "0","b", "c"].reduce(
(o, j)=>{
console.log(o, j);
return (o||{})[j]
},
{ 'a': [{ 'b': { 'c': 3 } }] }
)
// 打印过程为
{a: Array(1)} "a"
[{…}] "0"
{b: {…}} "b"
{c: 3} "c"
3
这利用reduce函数,第一个参数接受一个callback,第二参数把要获取的对象传入进去
稍微改造下
function _get(obj, keys, defaultVal){
return keys.split(/\./).reduce(
(o, j)=>( (o || {})[j] ),
obj
) || defaultVal
}
// 调用_get
_get({a:{b:{c:3}}}, 'a.b.c', 10) //return 4
_get({a:{b:{c:3}}}, 'a.b.c.d', 10) //return 10