如何根据父级Key推送子对象?附示例代码及预期输出
解决根据父级Key推送子对象值的问题
你的代码目前遇到的核心问题是全局的newobj被所有父级Key共享,每次调用setData都会修改同一个对象,导致最后所有父级对应的子对象都是最后一次修改后的结果,和你预期的每个父级拥有独立子对象不符。
修正后的代码
let parent = {} function setData(pid, cid, val) { // 先检查当前父级Key是否已有对应的子对象,没有则初始化空对象 if (!parent[pid]) { parent[pid] = {}; } // 给对应父级的子对象添加目标键值对 parent[pid][cid] = val; } setData(1, 0, true) setData(1, 1, false) setData(0, 1, true) console.log(parent) // 输出结果:{ '0': { '1': true }, '1': { '0': true, '1': false } }
代码说明
- 移除了全局的
newobj,改为直接操作parent中对应父级Key的子对象 - 每次调用函数时,先判断
parent[pid]是否存在:- 如果不存在,就为该父级Key创建一个新的空对象
- 如果已经存在,就复用这个已有的子对象
- 最后给这个子对象添加
cid: val的键值对,确保每个父级Key都拥有独立的子对象,不会互相覆盖
简化写法(可选)
你也可以用逻辑或运算符简化判断逻辑,效果完全一致:
let parent = {} function setData(pid, cid, val) { // 逻辑或简化:若parent[pid]不存在则赋值空对象 parent[pid] = parent[pid] || {}; parent[pid][cid] = val; }
内容的提问来源于stack exchange,提问作者Sanjay Shr
相关产品推荐
相关产品推荐

