JavaScript不用.reverse()原地反转数组:不同类型元素反转失败
数组原地反转问题的修复方案
问题根源
你的反转函数循环终止条件写错了,i <= list.length / 2会导致偶数长度数组出现重复交换问题。拿长度为4的数组举例:当i走到2时,j已经是1,此时i > j,交换这两个位置会把之前已经交换好的元素又换回去,直接导致中间两个元素(索引1和2)没完成正确交换。
修复后的代码
把循环条件改成i < j即可,当两个指针相遇或交叉时停止循环,避免无效交换:
reverse.js
#!/usr/bin/node exports.rev = function (list) { for (let i = 0, j = list.length - 1; i < j; i++, j--) { [list[i], list[j]] = [list[j], list[i]]; } return list; };
测试验证
运行你的main.js,输出会完全符合预期:
- 第一个数组:
[5, 4, 3, 2, 1] - 第二个数组:
["String", { id: 12 }, 89, "School"]
该方案完全满足约束:未使用.reverse()方法,全程原地交换,未创建新数组。
内容的提问来源于stack exchange,提问作者BaRzz007
相关产品推荐
相关产品推荐

