每5个元素创建一个新对象

时间:2012-06-11 23:17:57

标签: javascript jquery

我将使用类名浏览每个div并将html抛出到键/值对象中。我的问题是,要比现在更进一步,一个大的目标不会削减它。我需要将每个5放入一个不同的对象,或者执行与.slice()类似的操作,然后将其分解。我迷失了,因为如果我知道前面有多少,这很容易做到,我想让它尽可能地动态。用户可能有27个.example div与我下面的3个。它现在在一个对象中,而不是一个数组,因为键/值对象可以更好地使用dojo图表,以及我正在尝试做的其他一些事情。作为一个简单的例子:

    //HTML
    <div class="example">
        <div class="title"></div>
        <div class="definition"></div>
    </div>
    <div class="example">
        <div class="title"></div>
        <div class="definition"></div>
    </div>
    <div class="example">
        <div class="title"></div>
        <div class="definition"></div>
    </div>

    //JS
    var titles = {};
    $('.example').each(function(index) {    
        var exampleTitle = $(this).find('.title').html();
        var exampleDef = $(this).find('.definition').html();
        titles[exampleTitle] = exampleDef;
    });

在我看来,我想将每个5推入一个单独的对象,而不是titles = {}。

    //...
    titles2= {}; 
    titles3={};
    etc

预先不对代码中的金额进行硬编码。

(即我不想说if(index&gt; 5)并在代码中指定titles2,用户可能有更多,并且硬编码5的倍数到我能想到的任意数字支持看起来效率不高。)

或者使用类似于.slice()的5的倍数的方法。

titles.slice(0,5); //obviously does not work on objects, just as an example

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

$('.example').each(function(index) {    
    var exampleTitle = $(this).find('.title').html();
    var exampleDef = $(this).find('.definition').html();
    var titles;
    if (! window['titles' + (index / 5)]) {
         titles = window['titles' + (index / 5)] = {};
    }
    titles[exampleTitle] = exampleDef;
});

现在,您将在window范围内获得titles0,titles1,...等对象。