推荐答案
-- -------------------- ---- ------- -------- -------- ----- ------ - -- ----- -- ------ --- --- --------- - ----- --- ------------------- -- ------ -- --- ----- ----------- - ----- ---- - ------------------- - ---- - ---------------- --- ------- - ---- --- ---- - - -- - - ----------- - -- ---- - ----- --- - -------- -- -------------- -- ------ ------------ --- --------- - ------------ - --- - ------- - ------------- - ------------------------ - --- - ------ ------ ---- -
本题详细解读
1. 函数功能
set
函数的作用是根据给定的路径 path
,在对象 obj
中设置属性值 value
。路径可以是字符串(如 'a.b.c'
)或数组(如 ['a', 'b', 'c']
)。
2. 参数说明
obj
: 目标对象,必须是一个对象。path
: 路径,可以是字符串或数组。value
: 要设置的值。
3. 实现思路
- 参数校验:首先检查
obj
是否为对象,如果不是则抛出类型错误。 - 路径解析:将路径
path
转换为数组形式,方便后续处理。 - 遍历路径:遍历路径数组,逐层深入对象,如果某一层不存在或不是对象,则创建一个空对象。
- 设置值:在最后一层设置指定的值。
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. 示例
const obj = { a: { b: { c: 1 } } }; set(obj, 'a.b.c', 2); console.log(obj); // { a: { b: { c: 2 } } } set(obj, ['a', 'b', 'd'], 3); console.log(obj); // { a: { b: { c: 2, d: 3 } } }
6. 注意事项
- 如果路径中的某一层不是对象,函数会将其覆盖为一个空对象。
- 路径中的空字符串或无效键可能会导致意外行为,需确保路径正确。