推荐答案
// www.javascriptcn.com code example
function remove(obj, path) {
if (!obj || typeof obj !== 'object') {
return;
}
const keys = path.split('.');
let current = obj;
for (let i = 0; i < keys.length - 1; i++) {
const key = keys[i];
if (!current[key] || typeof current[key] !== 'object') {
return;
}
current = current[key];
}
delete current[keys[keys.length - 1]];
}
// 示例用法
const obj = {
a: {
b: {
c: 1,
d: 2
}
}
};
remove(obj, 'a.b.c');
console.log(obj); // 输出: { a: { b: { d: 2 } } }本题详细解读
1. 函数功能
remove(obj, path) 函数的作用是根据给定的路径 path 从对象 obj 中移除对应的属性。路径 path 是一个字符串,使用点号 . 分隔对象的层级。
2. 参数说明
obj: 需要操作的对象。path: 字符串形式的路径,表示要移除的属性在对象中的位置。
3. 实现思路
- 参数校验:首先检查
obj是否为对象类型,如果不是则直接返回。 - 路径解析:将路径
path按.分割成多个键名,存储在数组keys中。 - 遍历对象:通过循环遍历
keys数组,逐层深入对象obj,直到到达路径的倒数第二层。 - 删除属性:在到达路径的倒数第二层后,使用
delete操作符删除最后一个键名对应的属性。
4. 示例解析
// www.javascriptcn.com code example
const obj = {
a: {
b: {
c: 1,
d: 2
}
}
};
remove(obj, 'a.b.c');- 路径
'a.b.c'被分割为['a', 'b', 'c']。 - 函数首先访问
obj.a,然后访问obj.a.b,最后删除obj.a.b.c。 - 删除后,
obj变为{ a: { b: { d: 2 } } }。
5. 注意事项
- 如果路径中的某个中间键不存在或不是对象类型,函数会直接返回,不做任何操作。
- 该函数不会处理数组路径,如果需要处理数组路径,可以扩展函数逻辑。