我正在通过雄辩的javascript(第4章,练习2:倒转数组(,并且仅在几周内学习JavaScript。您必须重新创建阵列的反向方法。我是否以错误的方式在这个问题上工作?我的代码有效,这最重要吗?这是我的代码:
reverseArrayInPlace(arr) {
var arrLength = arr.length;
for (var i = arr.length - 1; i >= 0; i--) {
arr.push(arr[i]);
}
arr.splice(0, arrLength);
return arr;
}
这是作者写的答案:
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;
}
不确定书中的练习器,但是要逆转JavaScript中的数组,您可以简单地使用其本机函数Array.prototype.reverse()
。
可以在此处找到更多信息。
let data = ["a", "b", "c", "d"];
data.reverse();
console.log(data);
关于您的算法,它与作者不同,因为作者已交换阵列项目。
只是为了娱乐,我添加了自己的实现,我试图使代码更容易使用与本书的作者相同的主体,我希望可以很感兴趣:
let data = [ 1, 2, 3, 4, 5, 6];
let revert = data => {
let mid = Math.floor(data.length / 2);
let left = 0;
let right = data.length - 1;
for(; left < mid; left++, right--){
let temp = data[left];
data[left] = data[right];
data[right] = temp;
}
return data;
};
let result = revert(data);
console.log(result);
您的算法比作者较慢,因为您将回归数组附加到给定的数组作为参数,然后切片数组并返回另一半。您通过整个数组迭代。
在另一方面,作者使用了不同的算法。他的想法是交换元素,而无需扩展阵列。他只是首先交换和最后一个元素,然后从末端第二和第二,等等。
因此,我会选择作者解决方案,因为它更快并且不使用额外的内存。