[Medium] 请实现 Lodash 的 .get()

2024年1月26日

💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容

题目描述

实作一个 get  效用函式。它接收三个参数

  • 一个物件
  • 某个路径
  • 预设值

而此函式最后会返回路径的值;如果该路径不存在于给定的物件,则返回预设值。透过例子会比较好理解:

// 范例
const object = { a: [{ b: { c: 3 } }] };

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

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

//=> 'default'
get(object, "a[100].b.c", "default");

本题解答

以下是本题的解答,详细解题思路可以在 E+ 成长计划看到。如果想练习更多题目,推荐可以到 GreatFrontEnd 上练习

function get(object, pathParam, defaultValue) {
  if (object == null) {
    return defaultValue;
  }

  let count = 0;

  const path = Array.isArray(pathParam) ? pathParam : pathParam.split(".");
  const length = path.length;

  while (object != null && count < length) {
    object = object[String(path[count])];
    count += 1;
  }

  const result = count && count === length ? object : undefined;

  return result === undefined ? defaultValue : result;
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們