2015-05-17 2 views
-1

Хорошо, так это идея.массив jquery в организованный (по исходному индексу массива) фрагменты

1.я получил массив с 12 чисел (а = [1,2,3,4,5,6,7,8,9,10,11,12]

2.Я хочу разделить его на 4 куски, так что я сделал это ...

a=[1,2,3,4,5,6,7,8,9,10,11,12]; 
var b = []; 
while(a.length) { 
    b.push(a.splice(0,3)); 
} 

Это дало мне массив с 4 элементами с 3-х значений внутри каждого элемента

т.е. [1,2,3,4] = [1, 2 3, 4 5 6, 7 8 9, 10 11 12]

3. Теперь моя проблема в том, что я хотел бы, чтобы она была организована в способ, которым первое значение переходит в первый элемент, второе - во второе, третье - в третье, а четвертое - в четвертое, и оно повторяет процесс до тех пор, пока я не получу что-то вроде этого:

ie [1, 2,3,4] = [1 5 9, 2 6 10, 3 7 11, 4 8 12]

+0

От вопроса до сих пор, вы, кажется, способны делать это самостоятельно. –

+0

@AndrewShepherd да, я думаю, я мог бы сделать это вручную, но мне нужно, чтобы он был автоматическим, потому что у меня есть функция, которая добавляет еще 12 значений каждый раз, когда происходит событие. –

ответ

0

Это должно быть сделано;

var a = [1,2,3,4,5,6,7,8,9,10,11,12]; 
var chunksize = 3; 
var numOfChunks = Math.ceil(a.length/ chunksize); 
var b = new Array(numOfChunks); 
for(var i=0; i<a.length; i++) { 
    var pos = i%numOfChunks; 
    if(!b[pos]) b[pos] = []; 
    b[pos].push(a[i]); 
} 
0
// the original array 
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; 
// parts 
// instead of chunks, a value dependent of the size of the array, i suggest 
// using parts instead, which describes the problem more precise, 
// independently of the array size (12 items/4 chunks). 
var nth = 3; // read this: every 3rd goes into the same array 
// generate empty array for all parts 
var b = Array.apply(null, { length: nth }).map(function() { return [] }); 
// iterate through array 
a.forEach(function (e, i) { 
    // apply item to new array 
    // take the rest of the division (ie modulo) of counter (i) and part as 
    // first array index. with the modulo we take care, that the first index 
    // is always in the range [0 ... 2] or [0 ... part-1] and with every 
    // next element of the source array the round robin jumps to the next 
    // part of the target array. 
    // take the integer of the counter divided by the part as the second index. 
    // in this case we organise the indices and assignments as follows: 
    // (i: 0) b[0][0] = 1 
    // (i: 1) b[1][0] = 2 
    // (i: 2) b[2][0] = 3 
    // (i: 3) b[0][1] = 4 
    // (i: 4) b[1][1] = 5 
    // (i: 5) b[2][1] = 6 
    // (i: 6) b[0][2] = 7 
    // and so on. 
    // the point is, we know the exactly the cell for assignment. 
    b[i % nth][Math.floor(i/nth)] = e; 
}); 
+0

Это работает отлично, но мне было трудно понять, что здесь, не могли бы вы объяснить? –

+0

приветствуются. см. править. –

+0

Огромное вам спасибо, я понял это сейчас, я новичок в кодировании, и я не знал о том, как установить многомерные массивы, отличное мышление, у меня есть еще один вопрос для вас, если вы не возражаете ... Предположим, что у меня есть специальные числа, такие как 0 и 9, и я бы хотел, если это произойдет, они оказываются в том же b [e], что больше из них попадает к следующему b [e], делая это что-то например, b [e + 1] [last i + 1] Я не знаю, объясняю ли я свое право, надеюсь, вы сможете мне помочь –

Смежные вопросы