Skip to content

实现lodash中的get方法

Posted on:2022年4月10日 at 16:08

使用 lodash 中的 get 函数可避免长链的 key 时获取不到属性而出现问题,此时进行异常避免时及其服务,如 o.a && o.a.b && o.a.b.c && o.a.b.c.d

实现类似 lodash.get ,有以下测试用例:

var object = { 'a': [{ 'b': { 'c': 3 } }] };

get(object, 'a[0].b.c');
// => 3

get(object, ['a', '0', 'b', 'c']);
// => 3

get(object, 'a.b.c', 'default');
// => 'default'

/**
 * object: 对象
 * path: 输入的路径
 * defaultVal: 默认值
 **/

function get(object, path, defaultVal = "undefined") {
  // 先将path处理成统一格式
  let newPath = [];
  if (Array.isArray(path)) {
    newPath = path;
  } else {
    // 先将字符串中的'['、']'去除替换为'.',split分割成数组形式
    newPath = path.replace(/\[/g, ".").replace(/\]/g, "").split(".");
  }

  // 递归处理,返回最后结果
  return (
    newPath.reduce((o, k) => {
      console.log(o, k); // 此处o初始值为下边传入的 object,后续值为每次取的内部值
      return (o || {})[k];
    }, object) || defaultVal
  );
}
原文转自:https://fe.ecool.fun/topic/a8c7e778-4bc6-40f2-ba07-865a4b2200aa