(EloquentJavascript:第4章)反转数组-我的版本有什么问题吗
(EloquentJavascript: Chapter 4) Reversing an array - is there anything wrong with my version?
这是我在解决书中的"反转数组"练习时得到的。它与答案列表中的内容不同,所以我想知道我的版本是否有问题?
function revInPlace(array){
var tempArr = [];
for (i=array.length; i>0; i--){
tempArr.push(array.pop());
}
array = tempArr;
return array;
}
var range = [1,2,3,4,5,6,7,8,9,10];
console.log(revInPlace(range));
--> [10,9,8,7,6,5,4,3,2,1]
书中给出的答案是:
function reverseArrayInPlace(array) {
for (var i = 0; i < Math.floor(array.length / 2); i++) {
var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
由于您需要创建另一个数组,所以您没有执行相同的"就地"反转。。。
虽然书中的代码做到了这一点,但它是通过在数组的前半部分和后半部分之间切换(到位)来做到这一点的,只需尝试0和1的循环,假设一个由5个元素组成的数组:
// array = [ 1, 2, 3, 4, 5 ] ... i = 0
var old = array[i]; // array[0] is 1
array[i] = array[array.length - 1 - i]; // array[0] = array[4] which is 5
array[array.length - 1 - i] = old; // array[4] = 1
// array = [ 1, 2, 3, 4, 5 ] ... i = 1
var old = array[i]; // array[1] is 2
array[i] = array[array.length - 1 - i]; // array[1] = array[3] which is 4
array[array.length - 1 - i] = old; // array[3] = 2
长度为5的循环将在这里结束,因为Math.floor(5 / 2)
是2,因为您基本上已经完成了整个数组
从技术上讲,您的版本实际上并没有在适当的位置反转数组。您创建了一个新的数组tempArr
,这样在您的情况下:
reversed = revInPlace(arr);
console.log(arr); // returns empty original array after popping all elements off
console.log(reversed === arr); // returns false;
虽然您的版本确实执行相反的操作,但由于创建新数组、弹出和推送值,速度会慢得多。
相关文章:
- 我应该担心HTML5Shiv.min.js 3.7.2版本上的这些JSLint警告吗?
- 为什么我的谷歌浏览器扩展程序在谷歌浏览器版本 41.0.2272.89 中不起作用
- 如何知道我的NODEJS中的哪个javascript版本
- 获取模板是用我的Node.JS应用程序的新版本Handlebars错误预编译的
- 我使用谷歌标签管理器在我的网站上启动标签.变量“;未定义的“;在任何版本的Internet Explorer的自定义代码
- 使用 JS 寻找我的过滤器函数的较短版本
- 我的网站中是否需要 jQuery 脚本的非缩小版本
- 需要让我的网站与代码笔版本相同
- 在升级到Wordpress 3.6版本后,我的主页滑块停止了自动旋转
- (EloquentJavascript:第4章)反转数组-我的版本有什么问题吗
- 使用查询来更改我的js文件的版本
- 如何知道我的浏览器中有什么版本的Adobe Acrobat
- 我如何知道我的项目的最低node.js版本
- 我的代码将在哪个jQuery版本上运行
- 为什么我的webpack配置的es6版本会给我一个错误,而es5版本却没有;t
- 为什么我的代码在本地主机上的Internet explorer版本8上工作,而不是在服务器上,而不是在Internet
- 我正试图在plist版本中读取.strings文件.我有钥匙.和& lt; string>.我不确定如何在我的javas
- 为什么我的链接没有在我的网页的移动版本遵循
- 我试图添加一个发布下拉到我的图表,并有它重新加载时,一个新的版本被选中,但它没有
- 检查我的网站在不同的浏览器版本的移动友好