为什么这个反向函数不起作用

Why this reverse function isn't working?

本文关键字:函数 不起作用 为什么      更新时间:2023-09-26

为什么这不起作用?我不想使用任何其他变量来使其工作,也不想使用内置函数,只是问为什么这不起作用?

function reverse(arr){
  for(var i =0; i< arr.length; i++){
    arr.push(arr[arr.length-i]);
  }
  return arr;
}

你的代码中有很多缺陷。

  • 当您开始推送arr.push(arr[arr.length-i]);数组长度增加时,您将无法获得数据的一致性。
  • 这进入了一个无限循环,因为每次,arr都领先于它的长度。

最好使用另一个变量并反向,或者您可以使用内置的reverse()函数。拥有另一个变量并在其中添加临时内容并没有错。

解决 方案:

使用临时数组:

function reverse(arr) {
    var final = [];
    for (var i = arr.length - 1; i >= 0; i--) {
        final.push(arr[i]);
    }
    return final;
}

使用内置函数 ( Array.prototype.reverse() ):

function reverse(arr) {
    return arr.reverse();
}

使用少量临时变量:

a = [5,4,3,2,1];
function reverse(arr) {
  var i = 0, j = arr.length - 1;
  for (i = 0; i < j; i++, j--) {
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
  }
  return arr;
}
console.log(reverse(a));

> 您将耗尽内存。 您正在做的是将该数组的最后一个元素无限添加到数组的末尾。每次你打电话arr.push(...)你都会arr.length增加一。 您的 for 循环将永远无法完成,因为i永远不会少于 arr.length

我不想使用任何其他变量来使其工作,也不想使用内置函数

你不能。


对结果使用临时数组

function reverse(arr) {
    var res = []
    for (var i = arr.length - 1; i > -1; i--) {
        res.push(arr[i]);
    }
    return res;
}