Javascript 反向放置奇怪的错误?

Javascript 反向放置奇怪的错误?,javascript,eloquent,reverse,Javascript,Eloquent,Reverse,我在读那本雄辩的书,做了一个小作业,然后遇到了一些我真的搞不懂的事情。为什么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]; rever

我在读那本雄辩的书,做了一个小作业,然后遇到了一些我真的搞不懂的事情。为什么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]您没有在适当的位置反转阵列。您正在创建一个新数组,该数组由
reversearlayinplace

编辑:解决方案

不要创建新数组并返回它,只需在函数末尾使用此行将原始数组的内容替换为您反转的内容即可:

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);
要“就地”反转阵列,请使用原始阵列,而不是创建新阵列:

函数反向放置(r){
变量t,i,j;
对于(i=0,j=r.length-1;iconsole.log(arrayValue)
z
arrayValue
的数组不同。在函数内部,您创建了一个名为
z
的新数组,在该数组中,您将
按相反的顺序推送
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; 
    }
}
函数反向放置(r){
var aux;
对于(var c=0;c

默认情况下,数组是通过引用传递的,因此如果调用
reversearlayinplace(arrayValue)
,则在执行后,
arrayValue
将按相反顺序传递。请注意,您只遍历了数组的一半,因为如果您遍历了整个数组,那么您将切换回元素。

如果您真的想在适当的位置反转数组,您可以执行
arr.reverse()
?是的,但现在不想使用它,只是探索一下。thx tho!