手动反转数组

时间:2017-08-01 06:25:22

标签: javascript arrays reverse

我正在学习JS并坚持这件事。我需要使用带参数作为值的函数来反转数组。像这样:

value = [1, 2, 3, 4, 5];
reverse(value);
console.log(value);
//[5, 4, 3, 2, 1]

我写了这个函数,无法理解为什么它不起作用:

function reverseArrayInPlace(x){
  var p = 0, y = x;
  for(i = y.length-1; i>=0; i--){
    x[p] = y[i];
    p++;
    }
  return x;
  }

它返回:[5,4,3,4,5] 也许我在这里做了一些愚蠢的事情,但你还能指出我的错误在哪里吗? 谢谢!

5 个答案:

答案 0 :(得分:3)

您可以循环直到修改后的数组的中间位置。并简单地交换元素



function reverseArrayInPlace(x) {
  for (var i = 0, last = x.length - 1, mid = last/2, tmp; i <= mid; i++) {
    tmp = x[i];
    x[i] = x[last - i];
    x[last - i] = tmp;
    
  }
  return x;
}

const arr = [1,2,3,4,5]

reverseArrayInPlace(arr)

console.log(JSON.stringify(arr))
const arr2 = [1, 2, 3, 4, 5, 6]

reverseArrayInPlace(arr2)

console.log(JSON.stringify(arr2))
&#13;
&#13;
&#13;

答案 1 :(得分:2)

当您通过引用复制y=x时,您也在修改原始数组。

而是这样做:

function reverseArrayInPlace(x) {
  var p = 0, y = [];
  for (i = x.length - 1; i >= 0; i--) {
    y[p] = x[i];
    p++;
  }
  return y;
}

console.log(reverseArrayInPlace([1, 2, 3, 4, 5]))

答案 2 :(得分:2)

这一行:

var p = 0, y = x;

将存储在x中的数组的引用存储到变量y中。换句话说,xy指向相同的数组

要解决此问题,请构建一个新数组:

function reverseArrayInPlace(x) {
    var p = 0, y = [];

    for (i = x.length-1; i>=0; i--) {
        y[p] = x[i];
        p++;
    }
    return y;
}

如果您绝对需要修改原始数组,只需将反转的数组复制回原始数组:

function reverseArrayInPlace(x) {
    var p = 0, y = [];

    for (i = x.length-1; i>=0; i--) {
        y[p] = x[i];
        p++;
    }

    for (var i = 0; i < y.length; i++) {
        x[i] = y[i];
    }

    return x;
}

答案 3 :(得分:0)

实际上你要覆盖原始数组,所以你需要将数组克隆到临时变量然后重新分配值

refresh_token does not expire

但您可以直接使用此功能

value = [1, 2, 3, 4, 5];

答案 4 :(得分:0)

  

尝试此操作,这将根据您的要求替换原始数组:

value = [1, 2, 3, 4, 5];
value = value.reverse();
console.log(value);

或者你可以这样做:

value = [1, 2, 3, 4, 5];
reverse(value);
console.log(value);

function reverse(x) {
  var p = 0, y = [];
  for (i = x.length - 1; i >= 0; i--) {
    y[p] = x[i];
    p++;
  }
  value = y;
}