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