实现一个函数 remove(obj, path),根据路径移除对象属性

推荐答案

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

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

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

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

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

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

本题详细解读

1. 函数功能

remove(obj, path) 函数的作用是根据给定的路径 path 从对象 obj 中移除对应的属性。路径 path 是一个字符串,使用点号 . 分隔对象的层级。

2. 参数说明

  • obj: 需要操作的对象。
  • path: 字符串形式的路径,表示要移除的属性在对象中的位置。

3. 实现思路

  1. 参数校验:首先检查 obj 是否为对象类型,如果不是则直接返回。
  2. 路径解析:将路径 path. 分割成多个键名,存储在数组 keys 中。
  3. 遍历对象:通过循环遍历 keys 数组,逐层深入对象 obj,直到到达路径的倒数第二层。
  4. 删除属性:在到达路径的倒数第二层后,使用 delete 操作符删除最后一个键名对应的属性。

4. 示例解析

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

----------- ---------
  • 路径 'a.b.c' 被分割为 ['a', 'b', 'c']
  • 函数首先访问 obj.a,然后访问 obj.a.b,最后删除 obj.a.b.c
  • 删除后,obj 变为 { a: { b: { d: 2 } } }

5. 注意事项

  • 如果路径中的某个中间键不存在或不是对象类型,函数会直接返回,不做任何操作。
  • 该函数不会处理数组路径,如果需要处理数组路径,可以扩展函数逻辑。
纠错
反馈