我正在学习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
中。换句话说,x
和y
指向相同的数组。要解决此问题,请构建一个新数组:
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;
}