javascript - ReverseArrayInPlace 奇怪的错误?

标签 javascript eloquent reverse

我正在阅读这本 Eloquent 书,做了一个小作业,遇到了一些我无法真正弄清楚的事情。为什么 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] <- 返回 z

最佳答案

您不是在原地 反转数组。您正在创建一个由 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);

关于javascript - ReverseArrayInPlace 奇怪的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502920/

相关文章:

javascript - AngularJS 获取工厂对象的实例

mysql - Eloquent 简化/组合查询

Laravel 缓存不存储空值

c++ - 编写一个递归函数来反转输入字符串

javascript - 为什么一个字符串在变成 `this` 时会被肢解?

javascript - 等待使用 puppeteer 显示 Google Captcha

javascript - 如何操作 AngularJS 单页应用程序的 &lt;title&gt; ?

php - Laravel 在 hasMany 关系上覆盖删除方法

c - 使用函数反转 C 中的字符串

python - 反转列表项的算法?