实现一个函数 set(obj, path, value),根据路径设置对象属性值

推荐答案

-- -------------------- ---- -------
-------- -------- ----- ------ -
  -- ----- -- ------ --- --- --------- -
    ----- --- ------------------- -- ------ -- --- ----- -----------
  -

  ----- ---- - ------------------- - ---- - ----------------
  --- ------- - ----

  --- ---- - - -- - - ----------- - -- ---- -
    ----- --- - --------
    -- -------------- -- ------ ------------ --- --------- -
      ------------ - ---
    -
    ------- - -------------
  -

  ------------------------ - --- - ------
  ------ ----
-

本题详细解读

1. 函数功能

set 函数的作用是根据给定的路径 path,在对象 obj 中设置属性值 value。路径可以是字符串(如 'a.b.c')或数组(如 ['a', 'b', 'c'])。

2. 参数说明

  • obj: 目标对象,必须是一个对象。
  • path: 路径,可以是字符串或数组。
  • value: 要设置的值。

3. 实现思路

  1. 参数校验:首先检查 obj 是否为对象,如果不是则抛出类型错误。
  2. 路径解析:将路径 path 转换为数组形式,方便后续处理。
  3. 遍历路径:遍历路径数组,逐层深入对象,如果某一层不存在或不是对象,则创建一个空对象。
  4. 设置值:在最后一层设置指定的值。

4. 代码解析

  • if (!obj || typeof obj !== 'object'):检查 obj 是否为对象。
  • const keys = Array.isArray(path) ? path : path.split('.'):将路径转换为数组形式。
  • for (let i = 0; i < keys.length - 1; i++):遍历路径数组,逐层深入对象。
  • current[keys[keys.length - 1]] = value:在最后一层设置指定的值。

5. 示例

6. 注意事项

  • 如果路径中的某一层不是对象,函数会将其覆盖为一个空对象。
  • 路径中的空字符串或无效键可能会导致意外行为,需确保路径正确。
纠错
反馈