我正在阅读那本雄辩的书,做了一点任务,遇到了一些我无法弄清楚的事情。为什么return给出了一个答案,console.log提供了另一个答案?
function reverseArrayInPlace(r){
var z = [];
for(var c = (r.length)-1;c>=0;c--){
z.push(r[c]);
}
console.log(z);
return z;
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]
结果:
[5,4,3,2,1]< - console.log(z)
[1,2,3,4,5]< - return z
答案 0 :(得分:2)
您没有将数组转换为。您正在创建由reverseArrayInPlace
编辑:解决方案
而不是创建一个新数组并返回它,只需在函数末尾用这一行替换原来数组的内容:
r.splice.apply(r,[0,r.length].concat(z))
此行会删除数组r
中的所有元素,并将其替换为数组z
中的所有元素,然后您只需返回r
function reverseArrayInPlace(r){
var z = [];
for(var c = (r.length)-1;c>=0;c--){
z.push(r[c]);
}
console.log(z);
r.splice.apply(r,[0,r.length].concat(z));
return r;
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
答案 1 :(得分:0)
要反转数组"到位,"处理原始数组而不是创建一个新数组:
function reverseArrayInPlace(r) {
var t, i, j;
for(i = 0, j = r.length - 1 ; i < j ; i++, j--) {
t= r[i];
r[i]= r[j];
r[j]= t;
}
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
&#13;
答案 2 :(得分:0)
z
与arrayValue
不是同一个数组。在您的函数中,您创建了一个名为z
的新数组,您将以相反的顺序push
arrayValue
的元数据。而不是那样,我可以建议如下:
function reverseArrayInPlace(r){
var aux;
for(var c = 0; c < r.length / 2; c++){
aux = r[c];
r[c] = r[r.length - 1 - c];
r[r.length - 1 - c] = aux;
}
}
默认情况下,数组通过引用传递,因此如果您调用reverseArrayInPlace(arrayValue)
,则执行后arrayValue
将按相反的顺序运行。请注意,您只遍历数组的一半,因为如果遍历整个数组,则会将元素切换回来。