gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:41:16 25 4
gpt4 key购买 nike

为了好玩,我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com