我最近开始从Eloquent Javascript学习Javascript,直到数据结构的方式开始。
有一个编码练习跟随
写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它将一个数组作为参数,并生成一个新的数组,该数组具有相反顺序的相同元素。第二个是reverseArrayInPlace,它执行反向方法的工作:它修改作为参数给出的数组,以便反转其元素。两者都不能使用标准的反向方法。
这是我的代码
/*
* Create a Function reverseArray which returns a new array with the reversed array
* Create another Function reverseArrayInPlace() which modifies the ORiginal Array .
*/
function reverseArray(array) {
var reversed = [];
for (var i = 0; i < array.length; ++i) {
reversed[i] = array[array.length - (i + 1)];
}
return reversed;
}
function reverseArrayInPlace(array) {
var temp = 0;
for (var i = 0; i < array.length; ++i) {
temp = array[i];
array[i] = array[array.length - (i + 1)];
array[array.length - (i + 1)] = temp;
}
}
// Test Case
var ar = [10, 9, 8, 7, 6];
console.log(reverseArray(ar));
// Reverse the Array
reverseArrayInPlace(ar);
console.log(ar);
&#13;
reverseArray()函数可以正常工作,返回反转数组,但reverseArrayInPlace()不起作用。
我做错了什么?
答案 0 :(得分:3)
你正在倒两次。将array.length替换为array.length / 2
function reverseArrayInPlace(array){
var temp = 0;
for (var i =0; i < array.length/2; ++i){
temp = array[i];
array[i] = array[array.length - (i+1)];
array[array.length - ( i + 1 )] = temp;
}
}
答案 1 :(得分:1)
Arun的回答显示了正确的代码来执行您正在寻找的内容。
为什么你的代码没有按预期工作的答案是因为你循环遍历整个数组,用它的镜像交换每个变量。但是,一旦你过了一半,你的代码行就是设置镜像:
array[array.length - ( i + 1 )]
将数组交换回原始顺序。
在temp = array[i];
行之后添加此行:
console.log('Swapping ' + array[i] + ' with ' + array[array.length - (i+1)]);
现在运行代码时,您应该立即了解为什么需要在中途停止。
您应该看到:
Swapping 10 with 6
Swapping 9 with 7
Swapping 8 with 8
Swapping 9 with 7
Swapping 10 with 6
现在,使用Arun的代码运行,您将看到:
Swapping 10 with 6
Swapping 9 with 7
Swapping 8 with 8
[ 6, 7, 8, 9, 10 ]
有意义吗?
答案 2 :(得分:0)
如果您不太担心优化代码并且只是学习,那么还有另一种排序方法,那就是冒泡排序。
function reverseArrayInPlace(arr){
for (let i=0;i< arr.length;i++){
for (let j=0;j< arr.length;j++){
if (arr[j]<arr[j+1]) {
let holder=arr[j]
arr[j]=arr[j+1]
arr[j+1]=holder
}
}
}
return arr;
}
console.log(reverseArrayInPlace([1,2,3,4,5])) //[5,4,3,2,1]
如果您想反转像 [10,9,8,7,6] 这样的数组,只需将 IF 中的小于号翻转为大于号,例如
if(arr[j]>arr[j+1])
答案 3 :(得分:-1)
function reverseArrayInPlace(array){
for (var i =0; i < Math.floor(array.length/2); ++i){
var temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
return array;
}
var ar = [10, 9, 8, 7, 6];
console.log(reverseArrayInPlace(ar));
逻辑不正确,而不是什么都不返回
function reverseArrayInPlace(array){
for (var i =0; i < Math.floor(array.length/2); ++i){
var temp = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
return array;
}
var ar = [10, 9, 8, 7, 6];
console.log(reverseArrayInPlace(ar));