JavaScript 数组引用陷阱与“破纪录”问题的正确解法
本文详解如何修复因数组引用导致的逻辑错误通过深拷贝避免副作用正确统计最高分和最低分的破纪录次数。 本文详解如何修复因数组引用导致的逻辑错误通过深拷贝避免副作用正确统计最高分和最低分的破纪录次数。在解决经典的「Breaking Records」破纪录问题时核心目标是给定一个整数数组表示连续比赛得分统计打破最高分纪录的次数严格大于此前所有成绩和打破最低分纪录的次数严格小于此前所有成绩首项不计入统计。原代码看似逻辑清晰——分别定义 HP()High Peak和 LP()Low Peak函数遍历数组、剔除非峰值元素、再计数。但实际运行结果错误如输入 [10,5,20,20,4,5,2,25,1] 输出非预期的 [?, ?]根本原因在于 JavaScript 中数组是引用类型。观察原代码关键片段function HP(array) { var b array; // ? 错误b 与 scores 指向同一内存地址 // ... 后续对 b 的 splice() 操作会直接修改原始 scores 数组}当 HP() 执行 b.splice() 时由于 b array 是浅赋值原始 scores 数组被意外修改紧接着 LP() 接收的已是残缺数组导致低分统计完全失真——这正是“单独运行函数正常合起来就出错”的根源。立即学习“Java免费学习笔记深入” Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西