看下lodash官方用法
_.get(object, path, [defaultValue])
根据 object对象的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代。
参数介绍
obj (Object): 要检索的对象。
keys(Array|string): 要获取属性的路径。
[defaultVal] (*): 如果解析值是 undefined ,这值会被返回。
模拟实现
直接上代码:
function deepGet(obj, keys, defaultVal) {
return (
(!Array.isArray(keys)
? keys.replace(/\[/g, '.').replace(/\]/g, '').split('.')
: keys
).reduce((o, k) => (o || {})[k], obj) || defaultVal
);
}
var obj = {
a: [
{
b: {
c: 3,
},
},
],
e: {
f: 1,
},
};
console.log(deepGet(obj, 'e.f')); // 1
console.log(deepGet(obj, ['e','f'])) // 1
console.log(deepGet(obj, 'a.x')); // undefined
console.log(deepGet(obj, 'a.x', '--')) // --
console.log(deepGet(obj, 'a[0].b.c')) // 3
console.log(deepGet(obj, ['a', 0, 'b', ,'c'])) // 3
网友评论