[Medium] 请实现 Lodash 的 .get()
2024年1月26日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
题目描述
实作一个 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;
}