如何使用JavaScript将带数组索引的扁平化对象属性解析为嵌套数组
JavaScript扁平化嵌套键转结构化对象实现方案
实现思路
- 拆分原对象的属性为普通属性和嵌套数组属性两类单独处理
- 通过正则匹配嵌套键名中的数组下标和子字段名,自动组装数组结构
- 兼容多索引的
item_variants场景,不止支持0下标的单条数据
实现代码
function transformData(rawData) { const result = {} const variants = [] // 匹配嵌套键的正则:捕获数组索引和字段名 const variantKeyRegex = /^item_variants\[(\d+)]\['(\w+)']$/ for (const [key, value] of Object.entries(rawData)) { const matchRes = key.match(variantKeyRegex) if (matchRes) { // 处理嵌套数组属性 const index = Number(matchRes[1]) const field = matchRes[2] // 对应索引位置无对象则初始化 if (!variants[index]) variants[index] = {} variants[index][field] = value } else { // 普通属性直接赋值 result[key] = value } } // 挂载组装好的数组到结果对象 result.item_variants = variants return result } // 测试用例 const raw = { name: '123', description: 'Dev', "item_variants[0]['name']": '23434', "item_variants[0]['quantity']": '12334', "item_variants[0]['unit_price']": '123123', } console.log(transformData(raw))
输出结果
运行代码后输出的结构完全符合要求:
{ name: '123', description: 'Dev', item_variants: [ { name: '23434', quantity: '12334', unit_price: '123123' } ] }
内容的提问来源于stack exchange,提问作者Wai Phyo Naing
相关产品推荐
相关产品推荐

