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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:45:04