为什么这个反向功能不起作用?

Why this reverse function isn't working?

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

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()函数。有另一个变量并在其中添加临时内容没有错。

解法:

Using a temporary array:

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

Using built-in function (Array.prototype.reverse()):

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

Using few temporary variables:

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));

I don't want to use any other variable to make it work, and i don't want to use built in functions

你不能。


对结果使用临时数组

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

您将 运行 内存不足。您正在做的是将最初是该数组的最后一个元素无限添加到数组的末尾。每次调用 arr.push(...) 时,都会将 arr.length 增加一。您的 for 循环将永远无法完成,因为 i 永远不会小于 arr.length