Javascript 要按升序对数组排序,但最后应为零

Javascript 要按升序对数组排序,但最后应为零,javascript,Javascript,我正在为体育赛事做一个php应用程序,在某些情况下,得分的最小值就是获胜者。比如说,如果有100米跑比赛,那么冠军就是跑得最快的。获胜者拥有完成比赛所需的最短时间 但我面临的是,当有人缺席或在比赛结束前辞职时,我们将提供零分。在这种情况下,当我们要排序时,第一位将是零。但这应该是最后的结果 下面是我的javascript代码 var sorted = $(".result").sort(function (ib1, ib2) { return parseFloat($(ib2).val())

我正在为体育赛事做一个php应用程序,在某些情况下,得分的最小值就是获胜者。比如说,如果有100米跑比赛,那么冠军就是跑得最快的。获胜者拥有完成比赛所需的最短时间

但我面临的是,当有人缺席或在比赛结束前辞职时,我们将提供零分。在这种情况下,当我们要排序时,第一位将是零。但这应该是最后的结果

下面是我的javascript代码

var sorted = $(".result").sort(function (ib1, ib2) {
  return parseFloat($(ib2).val()) - parseFloat($(ib1).val());
});

// Result Names
$('#result_first').val($("#participant"+$(sorted.get(9)).data("section")).val());
$('#result_second').val($("#participant"+$(sorted.get(8)).data("section")).val());
$('#result_third').val($("#participant"+$(sorted.get(7)).data("section")).val());
$('#result_fourth').val($("#participant"+$(sorted.get(6)).data("section")).val());
$('#result_fifth').val($("#participant"+$(sorted.get(5)).data("section")).val());
$('#result_sixth').val($("#participant"+$(sorted.get(4)).data("section")).val());
$('#result_seventh').val($("#participant"+$(sorted.get(3)).data("section")).val());
$('#result_eighth').val($("#participant"+$(sorted.get(2)).data("section")).val());
$('#result_ninth').val($("#participant"+$(sorted.get(1)).data("section")).val());
$('#result_tenth').val($("#participant"+$(sorted.get(0)).data("section")).val());

// Result Numbers
$('#result_first_no').val($(sorted.get(9)).val());
$('#result_second_no').val($(sorted.get(8)).val());
$('#result_third_no').val($(sorted.get(7)).val());
$('#result_fourth_no').val($(sorted.get(6)).val());
$('#result_fifth_no').val($(sorted.get(5)).val());
$('#result_sixth_no').val($(sorted.get(4)).val());
$('#result_seventh_no').val($(sorted.get(3)).val());
$('#result_eighth_no').val($(sorted.get(2)).val());
$('#result_ninth_no').val($(sorted.get(1)).val());
$('#result_tenth_no').val($(sorted.get(0)).val());

请帮助我对这些值进行排序,零值应该是最后一个。

这里的基本思想是将
0
视为
无穷大:

var sorted = $(".result").sort(function (ib1, ib2) {
    function value(el) {
        var x = parseFloat($(el).val());
        return x === 0 ? Infinity : x;
    }

    return value(ib2) - value(ib1);
});
一个简单的测试:

var sorted=[5,2,0,9,4]。排序(函数(ib1,ib2){
功能值(el){
var x=el;//parseFloat($(el).val());
返回x==0?无穷大:x;
}
返回值(ib2)-值(ib1);
});

控制台日志(已排序)
这里的基本思想是将
0
视为
无限

var sorted = $(".result").sort(function (ib1, ib2) {
    function value(el) {
        var x = parseFloat($(el).val());
        return x === 0 ? Infinity : x;
    }

    return value(ib2) - value(ib1);
});
一个简单的测试:

var sorted=[5,2,0,9,4]。排序(函数(ib1,ib2){
功能值(el){
var x=el;//parseFloat($(el).val());
返回x==0?无穷大:x;
}
返回值(ib2)-值(ib1);
});
控制台日志(已排序)
如果
ib1
为0,则它比
ib2
大。否则,如果它们的乘积为0(因此
ib2
为0),则
ib1
ib2
小。如果它们都不为0,则应用初始逻辑



如果
ib1
为0,则它比
ib2
大。否则,如果它们的乘积为0(因此
ib2
为0),则
ib1
ib2
小。如果它们都不为0,则应用初始逻辑。

排序后确实应该使用循环。停下来用ID枚举你的元素-只需使用一个公共类。你能给我们看一下你的HTML标记吗?看起来您过度使用了jQuery。您真的应该在排序之后使用循环。停下来用ID枚举你的元素-只需使用一个公共类。你能给我们看一下你的HTML标记吗?看起来你过度使用了jQuery。我也喜欢你的解决方案。零值应该是最后一个,所以
value(ib2)-value(ib1)
不是
value(ib1)-value(ib2)
?您还可以尝试
函数值(el){返回数字($(el).val())| |无穷大;}
。我会这样做,但问题中的原始代码必须更改以反转当前使用的顺序。。。(
sorted.get(9)
sorted.get(8)
,等等)基本上,他们是按降序排序,然后手动反转结果。这个函数应该能够插入到现有的代码中,并获得所需的结果,但是是的,最好是将所有内容都反转。@smarx这是一个很好的观点,但是在正确阅读OP的代码之后,我更不清楚目标是什么。尽管如此,您的答案解决了大部分问题。作为一个广告,我们还可以建议创建一个以数字作为单词的数组,并在其上循环以更新值。这将减少冗余代码。若你们想在答案中包含这一点,我将把它留给你们。对于php,我已经使用asort($in_progress\u result)完成了排序;你能告诉我如何像你的解决方案一样忽略零@smarxI。零值应该是最后一个,所以应该
value(ib2)-value(ib1)
不是
value(ib1)-value(ib2)
?您还可以尝试
函数值(el){返回数字($(el).val())| |无穷大;}
。我会这样做,但问题中的原始代码必须更改以反转当前使用的顺序。。。(
sorted.get(9)
sorted.get(8)
,等等)基本上,他们是按降序排序,然后手动反转结果。这个函数应该能够插入到现有的代码中,并获得所需的结果,但是是的,最好是将所有内容都反转。@smarx这是一个很好的观点,但是在正确阅读OP的代码之后,我更不清楚目标是什么。尽管如此,您的答案解决了大部分问题。作为一个广告,我们还可以建议创建一个以数字作为单词的数组,并在其上循环以更新值。这将减少冗余代码。若你们想在答案中包含这一点,我将把它留给你们。对于php,我已经使用asort($in_progress\u result)完成了排序;你能告诉我如何忽略zero@smarx吗这不会像现在这样有效。。。您需要首先获取元素的值,然后将它们解析为浮点数。(这里您正在比较HTML元素,并且您只尝试在一个分支中解析它们,即使这样,您也没有解析实际值。)@smarx谢谢,我将相应地编辑此答案。如果两个值都为0,则此代码(假设我在上一条注释中的修复)始终表示传入的第一个值较小。因此,如果
a
b
都为零,
f(a,b)==-1&&f(b,a)==-1
。我认为任何好的
sort
实现都不会因此而中断,因为它不会同时问这两个问题,但这不是一个好主意。@smarx感谢您的建设性批评,现在是早上:)$in\u progress\u result=array($participant01=>$result01,$participant02=>$result02,$participant03=>$result03,$participant04=>$result04,$participant05=>$result05,$participant06=>$result06,$participant07=>$result07,$participant08=>$result08,$participant09=>$result09,$participant10=>$result10,);asort($in_progress\u result);您可以在PHP@Lajos arpad中的这段代码中执行此操作吗这不会像现在这样工作……您需要先获取元素的值,然后将它们作为浮点进行解析(这里您比较的是HTML元素,您只尝试在一个分支中解析它们,即使这样,您也无法将它们解析为浮点)