javascript - 使用 for 循环对数组进行排序失败

标签 javascript arrays loops sorting numbers

为了好玩,我在 CheckiO 上启动了一些 JavaScript .对于中位数任务,我遇到了问题。首先,我尝试使用 for 循环对给定的数组进行排序。为了在循环中查看数组,我使用了 console.log

for (var i = 0; i < data.length-1; i++) {
    if (data[i] > data[i+1]) {
        var temp = data[i];
        data[i] = data[i+1];
        data[i+1] = temp;
        i = 0;
    }
    console.log(data);
}

问题是只有一个数字在错误的位置;排序停止,只打印数组几次。 例如:

median([5,4,3,2,1])
[ 4, 5, 3, 2, 1 ]
[ 4, 3, 5, 2, 1 ]
[ 4, 3, 5, 2, 1 ]
[ 4, 3, 2, 5, 1 ]
[ 4, 2, 3, 5, 1 ]
[ 4, 2, 3, 5, 1 ]
[ 4, 2, 3, 5, 1 ]
[ 4, 2, 3, 1, 5 ]
[ 4, 2, 3, 1, 5 ]
[ 4, 2, 1, 3, 5 ]
[ 4, 1, 2, 3, 5 ]
[ 4, 1, 2, 3, 5 ]
[ 4, 1, 2, 3, 5 ]
[ 4, 1, 2, 3, 5 ]

对于这种行为有什么解释吗?谢谢!

最佳答案

在 JavaScript 数组原型(prototype)对象上为您实现了一个很棒的排序函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

但是,我敢打赌您知道这一点并且正在实现此代码以供学习之用。

您的版本中的错误与此变量 i 的递增有关

相反,试试这个:

var i = 0;
while(i < data.length) {
  if(data[i] > data[i + 1]) {
    var temp = data[i];
    data[i] = data[i + 1];
    data[i + 1] = temp;
    i = 0;
    continue;
  }

  i += 1;
}

由于我们不知道所需的迭代次数,因此使用 while 循环而不是 for 循环更合适也更明确。这样,代码就清晰了,i 的递增仅在逻辑 if 语句的计算结果为 false 时完成。

关于javascript - 使用 for 循环对数组进行排序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45175335/

相关文章:

javascript - 如何获取所选选项的值

javascript - JavaScript 控制台中的值与数组不同

javascript - 返回 JavaScript 数组中具有最低值的对象

c - C语言编程如何将输入的字符串输出到屏幕上?

javascript - jQuery 必填字段循环。基于 CSS 类

loops - Ant:如何遍历所有子文件夹并在 ant 中执行任务

javascript - 从对象数组生成 HTML 表格

javascript - 两个按钮,用 Jquery 做两件不同的事情

php - 数组中的空值作为第一项 (PHP)

java - 如何最小化长 && 语句 - Java