我正在学习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]
也许我在这里做了一些愚蠢的事情,但是您仍然可以指出错误的地方吗?
谢谢!

最佳答案

这行:

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

09-30 15:37
查看更多