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

问题描述:

为什么不能正常工作? ps。我不想使用任何其他变量使其工作,并且我不想使用内置函数,只是问为什么这不起作用?为什么这个反转功能不起作用?

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

你知道什么'arr.push(arr [arr.length-i]);' – Tushar

+0

@AlexanderMac当你看到问题并且代码,你不能给这个评论。 –

+0

@Alexander Mac我想反转而不使用任何其他变量,这可能吗? –

代码中有很多缺陷。

  • 当您开始推入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; 
} 

使用built-in function (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));

+0

@RobertLock欢迎。我可否知道你需要“不”使用临时变量的主要原因是什么? –

+0

我正在阅读Eloquent JS,并且有一个练习如下所示:“第一个reverseArray将一个数组作为参数,并生成一个具有相反元素的新数组。第二个reverseArrayInPlace会执行reverse方法的作用是:修改数组作为参数,以便反转它的元素,既不可以使用标准的反向方法 –

+0

所以,基本上我必须写两个函数,而且我还不能写第二个函数 –

我不希望使用任何其他变量,使其工作,而我不希望使用内置在功能

你不能。


使用结果

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