【问题标题】:jQuery Grouping Similar Items w/ Object LiteraljQuery 使用 Object Literal 对相似项目进行分组
【发布时间】:2010-06-15 21:24:50
【问题描述】:

所以我有这个结构设置:

<ul>
    <li>http://www.youtube.com/watch?v=dw1Vh9Yzryo</li> (Vid1)
    <li>http://www.youtube.com/watch?v=bOF3o8B292U</li> (Vid2)
    <li>http://www.youtube.com/watch?v=yAY4vNJd7A8</li> (Vid3)
    <li>http://www.youtube.com/watch?v=yAY4vNJd7A8</li>
    <li>http://www.youtube.com/watch?v=dw1Vh9Yzryo</li>
    <li>http://www.youtube.com/watch?v=bOF3o8B292U</li>
    <li>http://www.youtube.com/watch?v=yAY4vNJd7A8</li>
    <li>http://www.youtube.com/watch?v=dw1Vh9Yzryo</li>
</ul>

Vid1 重复 3 次,Vid2 重复 3 次,Vid3 重复 2 次。我想将它们放入一个可以像这样引用它们的结构中:

youtube[0][重复] = 3; youtube[0][下载] = "http://www.youtube.com/get_video?video_id=dw1Vh9Yzryo&fmt=36"

youtube[1][重复] = 3; youtube[1][下载] = "http://www.youtube.com/get_video?video_id=bOF3o8B292U&fmt=36"

youtube[2][重复] = 3; youtube[2][下载] = "http://www.youtube.com/get_video?video_id=yAY4vNJd7A8&fmt=36"

"This video was repeated " + youtube[0][repeated] + " times and you can download it here: " + youtube[0][download];

如何设置这个多维数组?谷歌搜索了几个小时,我不知道如何设置它。谁能帮帮我?

【问题讨论】:

    标签: jquery arrays structure


    【解决方案1】:

    看看JQuery: Remove duplicate elements?

    var seen = {};
    $('li').each(function() {
        var txt = $(this).text();
        if (seen[txt])
            seen[txt] += 1;
        else
            seen[txt] = 1;
    });
    

    现在seen 看起来像

    { "http://www.youtube.com/watch?v=dw1Vh9Yzryo": 3,
      "http://www.youtube.com/watch?v=yAY4vNJd7A8": 2,
      [...]
    }
    

    然后您可以创建一个新列表:

    newlist = $('<ul />');
    for (var vid in seen) {
        $("<li>This video was repeated " + seen[vid] + " times and you can download it here: " + vid + "</li>").appendTo(newlist);
    }
    newlist.appendTo(document.body); // or wherever you want it
    

    你可以在http://jsfiddle.net/CqMcY/看到这个工作

    【讨论】:

    • 大部分内容都很有帮助,但我对制作这一切的结构仍然有些困惑。我怎样才能获得seen 变量来保存计数和下载链接?
    • 在我的回答中使用三段代码中的第一段,它查找&lt;li&gt; 元素并根据他找到的内容构建seen
    • 我在jsfiddle.net/CqMcY 上为你构建了这个,你可以看到它在那里工作。
    • 好的,所以我发现我要为结构做的事情是拥有一个多维数组。这将允许我有这样的东西:“重复”+ youtube[0][重复]+“次并在”+youtube[0][下载]处下载;这样我就有空间在时间需要时添加更多变量。问题是我不知道如何设置。有什么想法吗?
    • 这里有一些提示:herongyang.com/JavaScript/…。如果您觉得您的问题没有得到解答,请编辑您的问题以包含新要求。或者接受这个答案:) 并提出另一个问题。
    【解决方案2】:

    好的,我想通了。我需要的结构是通过使用 Object Literal

    实现的
    var youtube = {};
    
    function makeDLLink(video)
    {
        return "*Download Link*";
    }
    
    $('li').each(function() {
        var videoLink = $(this).text();
        var download = makeDLLink(videoLink);
        if (!youtube[videoLink])
        {
            youtube[videoLink] = { "repeated": 1, "download": download };
        }
        else
        {
            youtube[videoLink].repeated += 1;
        }
    });
    
    $('ul').append("<br /><br /><br />");
    for (var key in youtube)
    {
        var obj = youtube[key];
        $('ul').append(key + " was repeated " + obj.repeated + " times and can be DL'd from " + obj.download + "<br /><br />");
    }
    

    您可以通过at jsFiddle.看到它的实际应用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 2015-02-23
      • 2016-01-13
      • 1970-01-01
      • 2020-12-03
      相关资源
      最近更新 更多