以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
85. 实现 `_.get()`

实现 get() 的思路:

  1. 先将第二个参数转成数组格式,数组里面的元素就是要获取的属性名或者下标值。
  2. 再遍历数组,通过 obj[curr] 的方式依次访问对象或者数组中的属性值(当然要加一些判断)。
  3. 如果最终取到的值为 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() 方法实现成功。