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

如何使用JavaScript获取JSON嵌套Number最大值并拼接生成唯一ID

问题核心

需要从指定结构的JSON数据中提取History数组下Number字段的最大值,与另外两个变量拼接生成固定12位的唯一ID,原有代码存在语法、逻辑错误无法正常运行,需要高效可靠的最大值获取方案。

原有代码问题梳理
  • 拼写错误:传入参数名为applicationNumber,代码中写为applicatinNumber(漏写字母o);返回语句中引用了从未声明的applicant变量,会直接抛出引用错误
  • 取值路径错误:解析JSON后得到的History是数组类型,不存在直接的.Number属性,访问History.Number会得到undefined,后续读取length属性会直接报错
  • 逻辑错误:数组的length-1值是最后一项的索引,既不是Number字段的值,也无法保证对应最大值;且Number字段存储的是字符串类型,不做类型转换直接运算/比较会出现字典序比对的逻辑错误(比如字符串"10"会判定为小于"2")
  • 拼接逻辑错误:连续使用+=属于赋值操作,且没有做长度补位、校验,无法保证最终输出为12位字符串
最优实现方案

根据你描述的「Number值随应用保存操作递增」的规则,分两种场景选择实现:

  1. 性能最高方案(推荐,适配你的业务规则)
    如果可以保证History数组严格按保存顺序排列,数组最后一项的Number就是当前最大值,不需要遍历全量数据,时间复杂度O(1),哪怕后续数据量涨到上万条也没有性能压力。
  2. 兼容乱序的稳妥方案
    如果无法保证数组排序规则,就遍历所有条目提取Number转成数值后取最大值,上百条数据的场景下性能损耗可以忽略,写法简洁易维护。

可直接运行的参考代码

function main(applicationNumber, historyJson) {
  // 解析JSON,做兜底容错
  const historyList = JSON.parse(historyJson)?.History || [];
  let maxNumber = 0;

  if (historyList.length > 0) {
    // ----  两个方案二选一  ----
    // 方案1:性能最优,适配有序递增场景
    // maxNumber = Number(historyList.at(-1).Number);

    // 方案2:兼容乱序场景,上百条数据无性能压力
    maxNumber = Math.max(...historyList.map(item => Number(item.Number)));
  }

  // 按实际业务规则拼接,这里用padStart做前补零保证每段长度固定,最终凑够12位
  // 示例分段规则:2位前缀 + 6位applicationNumber截取段 + 4位序号段 = 12位,可按实际需求调整各段长度
  const prefix = "00"; // 替换为你需要的第一个变量值
  const appNumPart = applicationNumber.substring(1).padStart(6, '0');
  // 注意:生成新ID时序号通常要在现有最大值基础上+1,如果不需要可以去掉+1
  const numberPart = String(maxNumber + 1).padStart(4, '0');

  const finalId = prefix + appNumPart + numberPart;
  // 校验长度,避免不符合规则
  if (finalId.length !== 12) {
    throw new Error("拼接后ID长度不符合12位要求,请检查各分段补位规则");
  }
  return finalId;
}

注意事项

  • 所有Number字段值必须先转成数值类型再做比较、运算,避免字符串隐式转换导致的逻辑错误
  • 用padStart做前补零可以保证每段长度固定,避免因为数值位数变化导致最终ID长度不符合12位要求
  • 如果后续数据量超过1万条,不要用Math.max(...arr)的写法(展开运算符传参过多会栈溢出),换成普通循环遍历即可,当前上百条数据的场景完全不需要考虑这个问题

内容的提问来源于stack exchange,提问作者Cooliozar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:18:44