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

BFE.devAI解答 - JavaScript 代码题
156. 请实现`_.set()`

实现思路:

首先要对传入的属性路径进行解析,然后根据解析的路径去找到对应的位置,将对应位置的值赋为传入的值即可。

具体实现:

function set(obj, path, value) {
  // 将属性路径都转化成数组形式,方便遍历和操作
  const parts = Array.isArray(path) ? path : path.split('.');
  let target = obj;
  let prevTarget = null;
  
  // 循环遍历 属性路径数组中的每一项,找到最后一项的前一项,以及最后一项
  for (let i = 0; i < parts.length; i++) {
    const key = parts[i];
    
    // 如果数字属性,则说明应该取出数组中的对应元素
    if (/^\d+$/.test(key)) {
      prevTarget = target;
      target = target[key] || (target[key] = []);
    } else {
      prevTarget = target;
      target = target[key] || (target[key] = {});
    }
  }
  
  // 对最后一个属性进行赋值
  prevTarget[parts[parts.length - 1]] = value;
}

代码中有详细的注释,主要思路就是循环遍历给定的属性路径数组,找到最后一个属性名的前一个位置,最后对最后一个属性进行赋值。同时,在处理数字类型的属性名称时,需要进行特殊的处理,即将它看作是数组下标。