简单实现lodash get

最近在项目里总是做数据兼容处理,比方说,正常可以从服务器拿到你要渲染的数据,但是服务器异常时,有可能后端传的数据不是太完整,你在业务组建里直接通过对象获取某一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
posted @ 2019-08-23 15:27  inaruto  阅读(1359)  评论(0)    收藏  举报