找到第二和第三高的数字Jquery

时间:2014-08-05 14:16:00

标签: javascript jquery

我正忙着创建一个讲台类型的屏幕,该屏幕将识别哪个人得分最高,然后将他们放入相对位置。

示例:给定此表:

+-------+-------+
| name  | score |
+-------+-------+
| Mike  |     3 |
| Kevin |    14 |
| John  |     6 |
+-------+-------+
凯文将成为冠军,约翰排名第二,麦克排名第三。

我如何使用Jquery得出这个结论?我设法浏览互联网,找出谁得分最高,然后得到他/她的名字。但我现在仍然坚持要找出谁是第二名,谁是第三名。

这是我到目前为止所做的:

   $( document ).ready(function() {

        var max = 0;
        var name;
        $('#HoldingPodiumData, .score').each(function()
        {
           $this = parseFloat( $(this).html() );
           if ($this > max)
           {
               max = $this;
               //name = $('.names').html();
               name = $(this).closest('td').prev('td').html()
           }


        });
        alert(max);
        alert(name);
        $("#winner").html(name);

    });

有人能帮我正确的方向吗?我创建了迄今为止我所取得的FIDDLE

谢谢! 麦克

3 个答案:

答案 0 :(得分:4)

这就是我要做的事情:

var max = 0;
var names = [];
$('#HoldingPodiumData tr:gt(0)').each(function()
{
    if ($(this).find(".score").length > 0)
    {
        names.push({
            score: parseFloat($(this).find(".score").html()),
            name: $(this).find(".names").html()
        });
    }
});

names = names.sort(function(a, b)
{
    return b.score - a.score;
});

$("#winner").html(names[0].name);
$("#second").html(names[1].name);
$("#third").html(names[2].name);

Fiddle。说明:

  1. 首先,我更改了选择器以获取所有tr,跳过第一个;
  2. 然后在循环中我验证tr是否有.score子元素;
  3. 如果是,我将其添加到名为names;
  4. 的结果数组中
  5. 然后我按照desc顺序对该数组进行排序。
  6. 我认为这不是最好的方法,但它并没有改变你的代码。这里的诀窍是sort()函数,你应该看看它。

答案 1 :(得分:2)

您需要将设置max的部分更改为新的第一个位置。相反,如果找到比当前第一名更好的人,请保持长度为3且移位的数组。

您可以通过保留其他名称数组来维护名称旁边的分数。

if ($this > scores[0])
{
    scores[2] = scores[1];
    scores[1] = scores[0];
    scores[0] = $this;

    names[2] = names[1];
    names[1] = names[0];
    names[0] = $(this).closest('td').prev('td').html();
}

代码完成后,您的第一名获奖者将在scores[0],第二名将在scores[1],第三名将在scores[2]


作为保留两个单独数组的替代方法,您可以定义具有名称和分数属性的对象。

答案 2 :(得分:-1)

var scoresSorted = $('.score').map(function () { return +$(this).text(); }).get().sort(function(a, b){return b-a});
$('#winner').text( $('td:contains('+scoresSorted[0]+')').prev().text() )
$('#second').text( scoresSorted[1] )
$('#third').text( scoresSorted[2] )

<强> jsFiddle example

第一行收集值,将它们放在一个数组中,然后对它们进行排序。第二行使用数组的第一个值(最高)来查找匹配的名称。最后两行从数组中得到第二和第三位值(索引1和2)。