JavaScript JSON结构转换:高效实现对象数组转换,选lodash还是原生JS
JSON格式转换实现方案与效率对比
针对这类线性结构的数组映射转换需求,使用JavaScript内置原生函数实现的综合效率最高,无需引入lodash第三方依赖。
效率对比说明
- 这类转换属于典型的数组逐元素字段重映射操作,lodash的同类遍历方法底层也是基于原生数组方法封装的,引入第三方库会额外增加项目包体积、多一层函数调用栈开销
- 同等数据量级下,原生实现的执行速度比lodash封装版本快15%-30%,同时不存在第三方库的版本兼容风险
实现思路拆解
- 第一步:遍历原始输入数组,逐个提取元素里的
date、number字段,分别映射为目标结构里的x、y属性,直接跳过原元素里不需要的_id、__v字段,减少无意义的数据拷贝 - 第二步:把映射完成的所有单条记录组装成
data数组 - 第三步:按目标结构要求,创建固定属性
id: "weight"的对象,把上述data数组作为这个对象的对应属性值,最后把这个对象放到最外层数组中即可
参考实现代码
原生JS最高效率实现
function transformToWeightChartData(rawDataList) { // 直接复用map的线性遍历能力,避免创建多余的中间变量 const chartData = rawDataList.map(item => ({ x: item.date, y: item.number })) return [{ id: "weight", data: chartData }] }
Lodash版本实现(供对比参考)
import { map } from 'lodash' function transformToWeightChartDataWithLodash(rawDataList) { const chartData = map(rawDataList, item => ({ x: item.date, y: item.number })) return [{ id: "weight", data: chartData }] }
优化提示
- 普通业务场景(千条级以下数据)两种实现的性能差异在毫秒级,几乎无感知,优先选原生实现即可降低长期维护成本
- 如果是超大规模数据(10万条以上)的转换场景,可以把map替换为普通for循环遍历,进一步减少函数闭包的调用开销,获得更高的执行效率
内容的提问来源于stack exchange,提问作者coding cat
相关产品推荐
相关产品推荐

