首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个Javascript函数没有逆转Array?

为什么这个Javascript函数没有逆转Array?
EN

Stack Overflow用户
提问于 2016-05-28 04:53:04
回答 4查看 349关注 0票数 1

我最近开始从雄辩的Javascript开始学习Javascript,并开始学习数据结构的方式。

有一个编码练习如下

编写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它以一个数组作为参数,并生成一个具有相同元素的新数组。第二个是reverseArrayInPlace,它执行反向方法所做的工作:它修改作为参数的数组,以便反转其元素。两种方法都不能使用标准的反向方法。

这是我的密码

代码语言:javascript
复制
/*
 *  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);

reverseArray()函数很好地完成了它的工作,返回了相反的数组,但是reverseArrayInPlace()不能工作。

我做错什么了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-28 04:57:23

你要倒车两次。将array.length替换为array.ength/2

代码语言:javascript
复制
 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; 
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2016-05-28 05:15:16

Arun的回答显示了正确的代码来执行您想要的操作。

为什么您的代码不能像预期的那样工作,原因是您正在遍历整个数组,用它的镜像交换每个变量。但是,一旦您已经过半,您的代码行将设置镜像:

代码语言:javascript
复制
array[array.length - ( i + 1 )]

正在将数组交换回原来的顺序。

temp = array[i];行之后添加这一行:

代码语言:javascript
复制
console.log('Swapping ' + array[i] + ' with ' + array[array.length - (i+1)]);

当您现在运行代码时,您应该立即了解为什么需要在中间点停止。

你应该看到:

代码语言:javascript
复制
Swapping 10 with 6
Swapping 9 with 7
Swapping 8 with 8
Swapping 9 with 7
Swapping 10 with 6

现在,使用Arun的代码运行,您将看到:

代码语言:javascript
复制
Swapping 10 with 6
Swapping 9 with 7
Swapping 8 with 8
[ 6, 7, 8, 9, 10 ]

讲得通?

票数 1
EN

Stack Overflow用户

发布于 2021-02-01 15:58:36

如果您不太担心优化代码和学习,那么还有另一种方法来对代码进行排序,那就是气泡排序。

代码语言:javascript
复制
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中将小于号翻转为大于号。

代码语言:javascript
复制
if(arr[j]>arr[j+1])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37495310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档