我的反向数组代码出了什么问题?

时间:2014-08-02 23:25:43

标签: javascript arrays

这是我的代码:

function reverseArray(array){
  var newArray = [];
  for (i = 0; i <= array.length + 1; i++)
    newArray.unshift(array.shift());
  return newArray;
};

我不明白为什么在for循环中条件不是i < array.length。例如,当数组有3个元素时,在我看来,你需要循环数组3次,将每个元素移动到新数组中,但是当我尝试它时由于某种原因在控制台上(例如{{ 1}}),我必须将其更改为当前console.log(reverseArray(["a", "b", "c"]))以获取代码以提供正确的输出i <= array.length + 1;。我不明白为什么,如果有人可以帮助解释为什么["c", "b", "a"]不起作用我会非常感激。谢谢!

2 个答案:

答案 0 :(得分:2)

  1. 您的代码在if条件检查中是错误的,因为每次都是如此 在for语句中检查条件,所以array.lenght是 每次都改变,条件不应该是array.length + 1,你 可以尝试下面的代码

    function reverseArray(array){
      var newArray = [];
      for (var i = 0,len=array.length; i < len; i++)
        newArray.unshift(array.shift());
      return newArray;
    };
    
  2. 我建议使用Array的反向方法,但如果你愿意的话 制作一个新的数组副本,你可以使用Array.slice(),试试这个:

    function reverseArray(array){
        var newArray=array.slice()
        newArray.reverse()
        return newArray
    }
    

答案 1 :(得分:1)

无论出于何种原因,如果你不能使用Array.prototype.reverse,我会写这样的函数

function reverseArray(arr) {
  var len = arr.length;
  var rev = new Array(len);
  for (var i=0, j=len-1; i<len; i++, j--) {
    rev[i] = arr[j];
  }
  return rev;
}

reverseArray([1,2,3]);
// [3,2,1]

您可以看到此解决方案dominate the benchmarks。它比使用10个元素阵列(在Chrome中测试)的原生 Array.prototype.reverse更快