JS遍历dataToInsert提取键名片段生成指定结构data的方法
代码修改方案
你原有代码的问题是硬编码了固定外层键FOI_OMG_101做内层遍历,既没有拿到外层动态键名做截取,也没有做目标结构组装,按以下逻辑修改即可:
- 直接遍历
dataToInsert的外层键值对,不要写死固定键名,适配所有同规则的外层属性 - 对外层键做字符串分割,按下划线拆分后取最后一段,就是你需要的
field值 - 把提取到的field、内层对象的name、value按目标结构组装即可
完整可运行代码
const dataToInsert = { FOI_OMG_101 : { name : "jghj.pdf", value: "base64" } } const res = [] // 遍历外层所有键值对 for (const [outerKey, innerValue] of Object.entries(dataToInsert)) { // 按下划线拆分键名,取最后一段作为field const fieldVal = outerKey.split('_').pop() // 组装目标结构 res.push({ field: fieldVal, fileName: innerValue.name, value: innerValue.value }) } // 若确定dataToInsert只有1个属性,直接取第一个元素即和示例结构完全一致 const data = res[0] console.log(data)
关键逻辑说明
- 键名提取用
split('_')拆分字符串后调用pop()取最后一个元素,无论前缀有多少段下划线,都能正确拿到末尾的编号段,比如键名为A_B_C_203时会自动提取到203 - 如果你的键名提取规则是固定取第N段,直接把
pop()换成对应数组下标即可,比如取第三段就写split('_')[2](数组下标从0开始计数) - 如果
dataToInsert有多个同规则属性,res数组会按顺序存放所有转换后的对象,可直接使用
内容的提问来源于stack exchange,提问作者Marizona
相关产品推荐
相关产品推荐

