如何用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; });
错误分析
- 对象误用数组方法:
q_obj是对象,不能调用数组的map方法,应遍历q_obj.ga_questions数组。 - 字符串操作错误:
concat返回新字符串,不会修改原变量,question始终为"q",可直接用模板字符串q${i}简化。 - 动态属性赋值错误:静态
.语法无法设置动态键名,需用方括号[动态键名]语法。
正确解决方案
遍历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
相关产品推荐
相关产品推荐

