Web前端之路JavaScript 进阶营

JavaScript 多级嵌套对象取值

2020-07-01  本文已影响0人  ikonan

看下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
上一篇 下一篇

猜你喜欢

热点阅读