数万行电子表格背景色数组:推送预定义行数组的最优方案咨询
场景
- 我有一个代表电子表格单元格背景色的二维数组:
[ ["#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00"], ["", "", "", "", "", ""], ["#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00"], ["#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00"], ["#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00"], ["", "", "", "", "", ""], // etc ]
- 每行的颜色由某个if条件决定,只能是全
#FFFF00或全""。 - 每个单元格的颜色需要单独定义,但实际上每行的列数始终相同,且整行颜色统一
问题
向主数组推送每行颜色数组的最高效方式是什么?是像这样在循环外创建数组:
const yellowArr = ["#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00"] const emptyArr = ["", "", "", "", "", ""] const masterArr = [] rows.forEach(function(row) { if (condition) { masterArr.push(yellowArr) } else { masterArr.push(emptyArr) } })
还是像这样在循环内直接推送:
const masterArr = [] rows.forEach(function(row) { if (condition) { masterArr.push(["#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00", "#FFFF00"]) } else { masterArr.push(["", "", "", "", "", ""]) } })
这是大型代码的一部分,行数可达数万,因此优化至关重要,因为脚本的运行时间有限。
另外,若有更适合的Stack Exchange站点,烦请告知,我未找到专门针对代码效率的站点。
分析与结论
毫无疑问,循环外创建数组再复用的方式效率更高,核心原因如下:
- 避免重复创建开销:循环内每次推送都要新建包含6个元素的数组,数万次循环会重复创建数万个相同的数组对象,触发频繁的内存分配与垃圾回收,严重拖慢执行速度。而循环外仅创建2个固定数组,后续只是引用它们,完全省去了重复创建的成本。
- 引用复用的安全性:根据你的业务场景,每行颜色统一且不需要后续修改单个单元格内容,复用同一个数组引用不会产生逻辑问题。如果之后有修改单个单元格的需求,可以在循环内通过
yellowArr.slice()或[...yellowArr]浅拷贝模板数组,既保留复用模板的效率,又避免引用共享的问题。
关于站点选择的问题,你当前的需求完全适合在Stack Overflow提问,它是处理编程相关(包括性能优化)问题的核心平台,没有专门针对代码效率的独立Stack Exchange站点,Stack Overflow的performance、javascript-performance等标签足以覆盖这类需求。
内容的提问来源于stack exchange,提问作者Rafa Guillermo
相关产品推荐
相关产品推荐

