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

时间:2016-04-28 14:18:29

标签: javascript arrays function reverse

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

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

3 个答案:

答案 0 :(得分:1)

您的代码中存在许多缺陷。

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

使用少量临时变量:

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

  

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

你不能。

使用临时数组作为结果

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

答案 2 :(得分:0)

你将失去记忆力。你正在做的是将最初的数组的最后一个元素无限地添加到数组的末尾。每次拨打arr.push(...)时,您都会将arr.length增加一个。您的for循环永远无法完成,因为i永远不会少于arr.length