JS实现removeStar函数:删除嵌套对象*键并提升其内部属性
removeStar函数实现方案
需求说明
- 处理传入的嵌套对象,定位到
p.c路径下键名为*的属性 - 将
*属性下的所有键值对直接挂载到其父节点c下,移除原*属性 - 返回的对象结构需与预期输出完全一致,且不修改原始传入的输入对象
示例基准代码
let input = { "p": { "pk1": "pv1", "pk2": "pv2", "c": { "*": { "ck1": "cv1", "ck2": "cv2" } } } } let expectedOutput = { "p": { "pk1": "pv1", "pk2": "pv2", "c": { "ck1": "cv1", "ck2": "cv2" } } };
可直接运行的实现代码
function removeStar(input) { // 深拷贝输入对象,避免修改原始入参 const target = structuredClone(input); const cNode = target?.p?.c; // 校验路径合法性,异常场景直接返回拷贝后的对象不报错 if (cNode && cNode['*'] && typeof cNode['*'] === 'object') { // 将*节点下的所有属性合并到父节点c Object.assign(cNode, cNode['*']); // 删除原*属性 delete cNode['*']; } return target; } // 验证输出,结果与expectedOutput完全一致 console.log(removeStar(input));
实现说明
- 优先用
structuredClone做深拷贝,不会污染原始传入的input对象;如果运行环境不支持该API,可替换为JSON.parse(JSON.stringify(input))实现普通JSON对象的深拷贝,适配绝大多数业务场景 - 增加了路径存在性校验,当传入对象不包含
p.c路径或者*属性不存在时不会抛出异常 - 用原生
Object.assign完成属性合并,逻辑简洁无额外依赖,性能表现更好 - 针对给定用例测试,返回结果结构、字段值和
expectedOutput完全匹配
内容的提问来源于stack exchange,提问作者nikhil
相关产品推荐
相关产品推荐

