以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
85. 实现 `_.get()`
实现 get()
的思路:
- 先将第二个参数转成数组格式,数组里面的元素就是要获取的属性名或者下标值。
- 再遍历数组,通过
obj[curr]
的方式依次访问对象或者数组中的属性值(当然要加一些判断)。 - 如果最终取到的值为 undefined,则返回第三个参数。
根据以上思路,可以写出以下代码实现 get()
:
function get(obj, path, defaultValue) {
// 将路径参数转成数组格式
const fields = Array.isArray(path) ? path : path.split(/[.[\]]+/g).filter(Boolean);
// 遍历每一个属性名或下标值
for (let i = 0; i < fields.length; i++) {
// 当前属性名或下标值
const curr = fields[i];
// 如果当前值不是对象,则无法获取子属性,直接返回默认值
if (!obj || typeof obj !== 'object') {
return defaultValue;
}
// 如果当前值是数组,则获取数组中指定下标的元素
if (Array.isArray(obj) && /^\d+$/.test(curr)) {
obj = obj[parseInt(curr)];
}
// 否则,获取对象中的指定属性值
else {
obj = obj[curr];
}
}
// 如果获取到的值为 undefined,则返回默认值
return obj === undefined ? defaultValue : obj;
}
const obj = {
a: {
b: {
c: [1,2,3]
}
}
}
console.log(get(obj, 'a.b.c')); // [1,2,3]
console.log(get(obj, 'a.b.c.0')); // 1
console.log(get(obj, 'a.b.c[1]')); // 2
console.log(get(obj, ['a', 'b', 'c', '2'])); // 3
console.log(get(obj, 'a.b.c[3]')); // undefined
console.log(get(obj, 'a.c', 'bfe')); // 'bfe'
输出结果与预期一致,说明 get()
方法实现成功。