ReverseArrayInPlace奇怪的错误?

时间:2015-12-29 00:49:10

标签: 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];
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

3 个答案:

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

zarrayValue不是同一个数组。在您的函数中,您创建了一个名为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将按相反的顺序运行。请注意,您只遍历数组的一半,因为如果遍历整个数组,则会将元素切换回来。