如何实现reverseArray函数反转数组?现有代码输出异常求解决
解决数组反转函数输出重复的问题
嘿,我来帮你梳理下问题所在,以及怎么修复它~
问题根源
你当前的reverseArray函数并没有真正“反转”数组,而是在原数组的末尾追加了一遍原数组的逆序元素。因为你在循环里执行inputArray.push(inputArray[i]),原数组的元素并没有被移除,只是不断新增元素,最后数组就变成了「原数组 + 逆序原数组」,所以printArray输出的时候就会把所有元素都打出来,也就是你看到的1 2 3 4 5 5 4 3 2 1。
几种修复方案
下面给你几个不同思路的解决方案,你可以根据需求选择:
方案1:生成新的反转数组(不修改原数组)
这种方式不会改动输入的原数组,而是创建一个新数组来存放反转后的结果,适合需要保留原数组的场景:
function printArray (inputArray){ for(let i = 0; i < inputArray.length; i++){ console.log(inputArray[i]); } } function reverseArray (inputArray){ const reversedArr = []; // 从原数组最后一位开始遍历,逐个加入新数组 for (let i = inputArray.length - 1; i >= 0; i--){ reversedArr.push(inputArray[i]); } printArray(reversedArr); } reverseArray([1, 2, 3, 4, 5]); // 输出:5 4 3 2 1
方案2:原地反转原数组(修改原数组)
如果希望直接修改原数组实现反转(节省内存,不需要额外数组),可以用双指针交换首尾元素的方式:
function printArray (inputArray){ for(let i = 0; i < inputArray.length; i++){ console.log(inputArray[i]); } } function reverseArray (inputArray){ let left = 0; let right = inputArray.length - 1; // 交换首尾元素,直到指针相遇 while (left < right) { // 临时变量存值,交换两个位置的元素 const temp = inputArray[left]; inputArray[left] = inputArray[right]; inputArray[right] = temp; left++; right--; } printArray(inputArray); } reverseArray([1, 2, 3, 4, 5]); // 输出:5 4 3 2 1
方案3:利用JS内置方法(简洁写法)
JavaScript数组自带reverse()方法,可以直接实现反转,不过要注意这个方法是原地修改原数组的:
function printArray (inputArray){ for(let i = 0; i < inputArray.length; i++){ console.log(inputArray[i]); } } function reverseArray (inputArray){ // reverse()会修改原数组,返回修改后的数组 const reversed = inputArray.reverse(); printArray(reversed); } reverseArray([1, 2, 3, 4, 5]); // 输出:5 4 3 2 1
如果不想修改原数组,可以先复制一份再反转:
function reverseArray (inputArray){ // 用扩展运算符复制原数组,再反转副本 const reversed = [...inputArray].reverse(); printArray(reversed); }
内容的提问来源于stack exchange,提问作者Rrf F
相关产品推荐
相关产品推荐

