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

如何用q+计数器重命名嵌套对象键以适配数据库插入

问题:拆解嵌套对象为递增键值对适配数据库插入

原JavaScript对象结构如下:

q_obj = {
  "GAInsSig": "Skylar",
  "GAnotes": "",
  "GAInsSig2": "",
  "ga_questions": [{
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": false
  }, {
    "ga_checkbox": true
  }, {
    "ga_checkbox": true
  }, {
    "ga_checkbox": true
  }],
  "badge_num": "12345",
  "work_order": "123",
  "unit_num": "123",
  "job_num": "GET",
  "date_completed": "2024-01-17"
}

插入数据库时因ga_questions是嵌套数组,数据库无对应列报错,需要将数组中每个ga_checkbox值转为q1、q2...形式的键值对,合并到原对象中。

用户尝试的代码存在问题,仅生成了固定键名question:

let i = 1;
q_obj.map((el) => {
  let question = "q";
  question.concat(i);
  el.question = el.ga_checkbox;
  i++;
  delete el.ga_checkbox;
});

错误分析

  1. 对象误用数组方法:q_obj是对象,不能调用数组的map方法,应遍历q_obj.ga_questions数组。
  2. 字符串操作错误:concat返回新字符串,不会修改原变量,question始终为"q",可直接用模板字符串q${i}简化。
  3. 动态属性赋值错误:静态.语法无法设置动态键名,需用方括号[动态键名]语法。

正确解决方案

遍历ga_questions数组,利用索引生成递增键名,将键值对合并到原对象后删除嵌套数组:

// 遍历嵌套数组,索引从0开始,序号需+1
q_obj.ga_questions.forEach((item, index) => {
  const key = `q${index + 1}`;
  q_obj[key] = item.ga_checkbox;
});

// 删除原嵌套数组字段
delete q_obj.ga_questions;

处理后q_obj的结构示例:

{
  "GAInsSig": "Skylar",
  "GAnotes": "",
  "GAInsSig2": "",
  "badge_num": "12345",
  "work_order": "123",
  "unit_num": "123",
  "job_num": "GET",
  "date_completed": "2024-01-17",
  "q1": false,
  "q2": false,
  // ... 依次到q15: true
}

内容的提问来源于stack exchange,提问作者ProfoundHypnotic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:04:59