javascript - 如何根据频率对数组中的键进行排序

标签 javascript jquery

我的提交按钮终于可以使用了。然而,它并没有计算结果中的所有选票。如何让我的提交按钮对所有投票进行排序?

HTML:

    <!DOCTYPE html>
    <html>
    <link rel="stylesheet" text="text/css" href="movies.css">
      <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
    </script>

    <title> 
    Movie List 
        </title>
      </head>
      <body>
        <h1>My Favorite Movies</h1>
            <div id = "first">
                <input type="text" id="movie" placeholder="Movie">
                <button id="enter">Enter</button>
            </div>
      <div id="left">
        <div id="list"><u>Chosen Films:</u></div>
        <!-- <div>Chosen Films: <span id="list"></span></div> -->
        <!-- <div id="films"></div> -->
        <div id="best"><u>You're Best Films:</u></div>
        <button id="submit">Submit</button>
      </div>

        <div id= "results"><u>Results</u></div>       

    <script type="text/javascript" src="movies.js"></script>
      </body>
    </html>

Javascript:

$(document).ready(function() {
    var films = [];
    // with working vote button
    $("#enter").click(function () {
        var movie = $("#movie").val();
        var $btn = $('<button />', {
            id: "vote",
            type: "button",
            text: "Vote",
            value: movie,
            click: function(){
                var vote = this.value;
                $("#best").append('<p>'+vote+'</p>');
                films.push(vote); 
            }
        });

        var $p = $('<p />');
        $p.append($btn, " ", movie);
        $p.appendTo("#list");
    });
});

所以问题就出在这里:

此代码应允许提交按钮将“您最好的电影”下列出的电影按照投票顺序排列在“结果”下的第三个列表中。

$("#submit").click(function () {
    var ballot = {};
    for (var i = 1; i < films.length; i++) {
        var key = films[i];
        ballot[key] = (ballot[key] || 0) + 1;
    }
    var elect = [];
    for (key in ballot) elect.push({key: key, freq: ballot[key]});
    elect.sort(function(a,b){return b.freq - a.freq});
    console.log(elect);
    for (var i = 0; i < elect.length; i++){
        console.log(elect[i].key);
        $("#results").append('<p>' + elect[i].key + '</p>');
    }
});

如有任何建议或想法,我们将不胜感激!

最佳答案

$("#submit").click(function () {
    var ballot = {};
    for ( var i = 0; i < films.length; i++) {
         var key = films[i];
        ballot[key] = (ballot[key] || 0) + 1;
        }
    var elect = [];
        for (key in ballot) elect.push({key: key, freq: ballot[key]});
    elect.sort(function(a,b){return b.freq - a.freq});
    console.log(elect);
    for (var j = 0; j < elect.length; j++){
        console.log(elect[j].key);
        $("#results").append('<p>' + elect[j].key + '</p>');
    }

关于javascript - 如何根据频率对数组中的键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33616999/

相关文章:

JavaScript:无法获取对象的值

javascript - 将文件路径字符串解析为json对象

jquery - 使用 jQuery 将元素添加到列表时,带有 float div 的两列布局会中断

javascript - 使用 jQuery 或 underscore.js 合并对象中多个数组的值

javascript - HTMLInputElement 没有方法 'val'

javascript - Angular-Charts - 饼图,显示每个数据切片内的标签

javascript - 使用 Javascript 的图像像素颜色值

javascript - 使用对象键进行 ng-switch

javascript - 激活 div 内元素的监听器而不激活 div 的监听器

当通过 ajax 引入链接时,jquery colorbox 插件会中断