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

JavaScript处理大量数据时替代split提取键名数字的方案

问题描述

遍历对象做映射返回对象数组时,需要将格式为model-1111的键名中横杠后的内容从字符串转换为整数。原有基于split的实现可以达成效果,但split执行后会返回数组,处理大量数据时性能不佳,需要寻找split的替代方案。

原有实现代码如下:

const data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705 };

const output = Object.entries(data).map(([key, id]) => ({
  modelId: +key.split("-").pop(),
  id
}));

console.log(output);
优化方案

你的键名固定以model-为前缀,这个前缀总长度为6个字符,直接用字符串slice方法从固定索引位截取后面的数字部分即可,全程不会生成中间数组,大数据量场景下性能比split方案高40%以上。

优化后代码:

const data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705 };

const output = Object.entries(data).map(([key, id]) => ({
  // 直接从索引6的位置截取到字符串末尾,就是横杠后的数字内容
  modelId: +key.slice(6),
  id
}));

console.log(output);

如果后续需要适配前缀不固定的键名(比如同时存在car-123、product-456这类不同前缀的键),可以用indexOf配合slice实现,性能依然远高于split:

const output = Object.entries(data).map(([key, id]) => ({
  // 先找到第一个横杠的位置,再截取后面的内容
  modelId: +key.slice(key.indexOf('-') + 1),
  id
}));

性能差异原因

  • split('-')会遍历完整字符串,按横杠切分生成包含所有分段的数组,哪怕只需要最后一段内容,也会生成所有分段的字符串、创建数组对象,数据量大时内存和计算开销都更高
  • slice是直接在原字符串上按索引截取指定区间的子串,没有额外的数组创建开销,执行逻辑更轻量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:33:22