推荐答案
// www.javascriptcn.com code example
function get(obj, path, defaultValue) {
// 将路径字符串转换为数组
const keys = Array.isArray(path) ? path : path.split('.');
// 遍历路径数组,逐步深入对象
let result = obj;
for (const key of keys) {
if (result && typeof result === 'object' && key in result) {
result = result[key];
} else {
return defaultValue;
}
}
return result !== undefined ? result : defaultValue;
}本题详细解读
1. 函数功能
get 函数的作用是从一个嵌套的对象中根据给定的路径获取属性值。如果路径不存在或属性值为 undefined,则返回默认值。
2. 参数说明
obj: 目标对象,可以是任意嵌套的对象。path: 路径,可以是字符串(如'a.b.c')或数组(如['a', 'b', 'c'])。defaultValue: 默认值,当路径不存在或属性值为undefined时返回。
3. 实现思路
- 路径解析:首先将路径字符串转换为数组形式,方便遍历。如果路径已经是数组,则直接使用。
- 遍历路径:通过遍历路径数组,逐步深入对象,获取对应的属性值。
- 边界处理:在遍历过程中,如果发现当前对象不存在或当前属性不存在,则直接返回默认值。
- 返回结果:如果最终获取到的值不是
undefined,则返回该值;否则返回默认值。
4. 示例
const obj = { a: { b: { c: 42 } } };
console.log(get(obj, 'a.b.c', 'default')); // 输出: 42
console.log(get(obj, 'a.b.d', 'default')); // 输出: 'default'
console.log(get(obj, ['a', 'b', 'c'], 'default')); // 输出: 425. 注意事项
- 路径中的
.会被解析为对象的嵌套层级。 - 如果路径是数组形式,则直接按数组顺序访问对象属性。
- 如果路径不存在或属性值为
undefined,函数会返回默认值。