JavaScript如何修改解码函数实现带数组支持的嵌套对象转换?
解决方案
核心修改点是在初始化中间层级节点时,判断下一级键名是否为数字索引,如果是则创建数组而非普通对象。修改后的完整代码如下:
function assembleQueryData(input) { const output = {}; const keys = Object.keys(input); // 校验是否为合法数组索引的工具函数 const isArrayIndex = (str) => /^\d+$/.test(str) && Number(str) >= 0; for (let i = 0; i < keys.length; i++) { const key = keys[i]; const dots = key.split("."); let last = output; for (let j = 0; j < dots.length; j++) { const currentKey = dots[j]; if (j === dots.length - 1) { last[currentKey] = input[key]; } else { // 未初始化时,判断下一级是否为数字索引,决定初始化为数组还是对象 if (!last[currentKey]) { const nextKey = dots[j + 1]; last[currentKey] = isArrayIndex(nextKey) ? [] : {}; } } last = last[currentKey]; } } return output; }
实现逻辑说明
- 新增
isArrayIndex工具函数,判断键名是否为非负整数,符合规则即视为数组索引 - 原代码默认所有中间层级都创建
{}对象,修改后会先读取下一级键名做判断:如果下一级是数字索引,当前层级就初始化为数组[] - 已有值的层级不会重复初始化,避免覆盖已经生成的结构
传入你给出的input参数调用该函数,即可输出符合要求的output对象。
内容的提问来源于stack exchange,提问作者Mahsa Shadi
相关产品推荐
相关产品推荐

