创建正确的数组结构

时间:2012-10-26 02:50:03

标签: javascript loops

一个集合返回11项如下;

   ( 1, "Ball", "Result1") 
   ( 2, "Ball", " Result2") 
   ( 3, "Ball", " Result3") 
   ( 4, "Ball", " Result4") 
   ( 5, "Ball", " Result5") 
   ( 6, "Ball", " Result6") 
   ( 7, "Ball", " Result7") 
   ( 8, "Ball", " Result8") 
   ( 9, "Pool", " Pool 1") 
   ( 10, "Pool", " Pool 2") 
   ( 11, "Pool", " Pool 3") 

我想存储它们,将它们分为四个项目......这样我的数组就像这样

var data = [];
                    data.push({
                    myclass: "First4",
                    schedule: [ {
                        id : '1',
                        gameType: 'Ball',

                        result: 'Result11'
                    }, {
                        id: '2',
                        gameType: 'Ball',

                        result: 'Result2'

                    },...........  ]



                });
                                    //second group
                data.push({
                    divClass : "second4",
                    items : [ {
                        id : '5'
                        gameType: 'Ball',
                        result: 'Result5'
                    }, {
                        id : ''
                        gameType: 'Ball',
                        result: 'Result6

                    } ]
                });

如何编写for循环以便我可以动态地获得相同的结果,而不是手动编写推送

for(var i = 0; i < collLength; i++){
// do push 1 with first four  //data.push(class, sheculde first 4 items, result)
// do second push with second four
// do third push with the remaining

  }

4 个答案:

答案 0 :(得分:1)

var data = [];

for(var i = 0; i < collLength; i+=4) {
    data.push({
        divClass: "group" + (i / 4),
        items: collection.slice(i, i + 4).map(function(item) {
            return {id:item[0], gameType:item[1], result:item[2]};
        })
    });
}

答案 1 :(得分:0)

var indata = [...]; // this is filled with your list of objects.
var outdata = [ ];

var n = indata.length;

for (var i = 0; i < n; i += 4)
{
    outdata.push({
        class: 'group' + outdata.length, 
        items: indata.slice(i, i + 4)
    });
}

答案 2 :(得分:0)

var indata = [...]; // this is filled with your list of objects.
var outdata = [ ];

function mapper(element, i)
{
     var j = Math.floor(i / 4);

     if (outdata[j] == undefined)
         outdata[j] = { class: 'group' + j, items: [ ] };

     outdata[j].items.push(element);
}

indata.map(mapper);

答案 3 :(得分:0)

这是使用.reduce()的方式。

var data = collection.reduce(function(arr, obj, i) {
    return i % 4 ? arr : 
                   arr.concat({
                      divClass: "group" + (i / 4),
                      items: collection.slice(i, i + 4).map(function(item) {
                          return {id:item[0], gameType:item[1], result:item[2]};
                      })
                   });
}, []);