我想出了一个解决这个问题的简单方法,并且确定了。
var reverseArrayInPlace = function(arr) {
var result = [];
for(var i = 0; i < arr.length; i++) {
result.unshift(arr[i]);
}
for(var j = 0; j < result.length; j ++) {
arr[j] = result[j];
}
};
//test
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
//[5,4,3,2,1]
但是,我想知道为什么我不能使用更简单的方法只需将arr
参数赋给结果值[5,4,3,2,1] ?但是下面的代码不起作用,它仍打印出[1,2,3,4,5]
。
var reverseArrayInPlace = function(arr) {
var result = [];
for(var i = 0; i < arr.length; i++) {
result.unshift(arr[i]);
}
arr = result;
};
//test
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
//[1,2,3,4,5]
答案 0 :(得分:1)
在你的开发者控制台中试试这个:
var arr = [1,2,3];
function retArr(arr){
var res = arr;
res = [3,2,1];
return res;
}
retArr(arr); // returns 3,2,1
console.log(arr); // logs 1,2,3
你所做的只是创造一个新阵列! 函数的参数是按值传递的。 直接for循环访问的原因是因为数组属性是传递引用。
P.S。实际的就地逆转看起来像这样:
function reverseInPlace(array){
var swap = function(i,j){
var t = array[i];
array[i] = array[j];
array[j] = t;
};
for (var i = 0; i < array.length/2;i++){
swap(i,array.length-i-1);
}
}
答案 1 :(得分:1)
尝试使用.slice()
,.pop()
var reverseArrayInPlace = function(arr) {
var copy = arr.slice(0);
for (var n = 0; n < arr.length; n++) {
arr[n] = copy.pop();
}
return arr
};
//test
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
&#13;
或者,使用Array.prototype.sort()
var reverseArrayInPlace = function(arr) {
arr.sort(function(a, b, index) {
return index < index + 1 ? -1 : 1
});
};
//test
var arrayValue = ["a", "b", "c", "d", "e"];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
&#13;