You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据父级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:48:30