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

请教:如何理解《Eloquent JavaScript》中的reverseArrayInPlace数组反转方法?

手动实现数组原地反转的逻辑解析

这个reverseArrayInPlace函数的核心是原地修改原数组完成反转,不用创建新数组,下面拆解每一步的逻辑:

  • 循环边界的设计:for (let i = 0; i < Math.floor(array.length / 2); i++)
    之所以只循环到数组长度的一半(用Math.floor取整),是因为每次循环会交换一对对称位置的元素:第i个元素和倒数第i+1个元素。如果循环整个数组长度,已经交换好的元素会被再次交换回去,等于做无用功。比如数组长度为4时,循环2次就完成所有元素交换;长度为5时,中间的第3个元素不需要动,循环2次就够。

  • 元素交换的逻辑:

    1. 先用let old = array[i]把当前位置的元素存到临时变量里,避免直接覆盖后丢失原数据
    2. 把数组末尾对应位置的元素array[array.length - 1 - i]赋值给array[i],完成前半部分位置的替换
    3. 再把临时变量old赋值给array[array.length - 1 - i],完成后半部分位置的替换,这样就完成了一对对称元素的交换
  • 实际运行例子(以输入[1,2,3,4]为例):

    • 第一次循环i=0:交换array[0](1)和array[3](4),数组变为[4,2,3,1]
    • 第二次循环i=1:交换array[1](2)和array[2](3),数组变为[4,3,2,1]
    • 此时Math.floor(4/2)=2,i递增到2,不满足i<2的条件,循环结束,返回反转后的数组

另外,函数里的console.log(array[array.length - 1 - i])只是打印每次要交换的目标元素,对反转逻辑没有影响,去掉也能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:23:24