【问题标题】:Why this reverse function isn't working?为什么这个反向功能不起作用?
【发布时间】:2016-04-28 14:18:28
【问题描述】:

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

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]);是做什么的
  • @AlexanderMac 看到问题和代码的时候千万不要给这个评论。
  • @Alexander Mac 我想在不使用任何其他变量的情况下进行反转,这可能吗?
  • 欢迎来到 Stack Overflow!请参阅How to Askminimal reproducible example
  • @Tusher 我正在学习,所以也许我真的不知道它是如何工作的,也许我认为我知道但我真的不知道。这就是我问的原因:)

标签: javascript arrays function reverse


【解决方案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();
}

使用少量临时变量:

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

【讨论】:

  • @RobertLock 欢迎您。我可以知道您需要“不”使用临时变量的主要原因是什么吗?
  • 我正在阅读 Eloquent JS 并且有一个这样的练习:“第一个,reverseArray,将一个数组作为参数并生成一个新数组,该数组以相反的顺序具有相同的元素。其次,reverseArrayInPlace,执行 reverse 方法的作用:它修改作为参数给出的数组以反转其元素。两者都不能使用标准的 reverse 方法。
  • 所以,基本上我要写两个函数,但我还是不能写第二个
  • @RobertLock 哦,好吧...这实际上很疯狂,因为这根本不可能。或者,如果您真的只想使用一个变量或一个数组?因为我们可以用不同的方式使用它,只需要一个数组。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    你不能。


    使用临时数组作为结果

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多