看下lodash官方用法
_.get(object, path, [defaultValue])
根據(jù) object對象的path路徑獲取值您宪。 如果解析 value 是 undefined 會以 defaultValue 取代霉猛。
參數(shù)介紹
obj (Object): 要檢索的對象。
keys(Array|string): 要獲取屬性的路徑缎脾。
[defaultVal] (*): 如果解析值是 undefined ,這值會被返回。
模擬實(shí)現(xiàn)
直接上代碼:
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