Преобразовать вектор в матрицу
Всем привет, я столкнулся с задачей и не понимаю как ее решить...
Есть массив var arr = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']; Необходимо привести его вот к такому виду: var arr_res = [ ['01', '05', '09'], ['02', '06', '10'], ['03', '07', '11'], ['04', '08', '12'] ]; Мой вариант использует объект, вместо двухмерного массива и к тому же не работает...
var arr = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
var matrix = {
one: [],
two: [],
three: [],
four: []
}
for (var i = 0; i <= arr.length; i++) {
switch (i) {
case (i + 0): matrix.one.push(arr[i]); break;
case (i + 1): matrix.two.push(arr[i]); break;
case (i + 2): matrix.three.push(arr[i]); break;
case (i + 3): matrix.four.push(arr[i]); break;
}
}
В идеале алгоритм должен принимать параметр количества строк в матрице. Спасибо! |
function group(array, chunk) {
var stack = [];
for(var i = 0, len = array.length; i < len; i += chunk) {
stack.push(array.slice(i, i + chunk));
}
return stack;
}
alert(JSON.stringify(group([1,2,3,4,5,6,7], 3)));
|
Вариант по n - http://jsfiddle.net/HJ52r/4/
|
Цитата:
|
Tek,
Огромное спасибо! Вариант nerv_, неправильно собирает матрицу |
Цитата:
До кучи еще один вариант:
var arr = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
console.log(toMatrix2(arr, 4));
// ---------------------
function toMatrix2(array, rowsCount) {
var step = Math.floor(array.length / rowsCount) + 1;
var len = array.length;
var martrix = [];
for(var i = 0; i < rowsCount; i++) {
martrix.push([]);
for(var j = i; j < len; j+= step) {
martrix[i].push(arr[j]);
}
}
return martrix;
}
|
nerv_,
И снова неудача:) Попробуйте указать в вашем варианте rowsCount = 5 |
Цитата:
Указал 5. Вариант toMatrix разбил на 6 строк вместо 5 toMatrix2 разбил на 5 строк Или ты знаешь способ разделить 12 на 5 без остатка? :D |
ponyspy,
:write:
var arr = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
function foo(arr, row) {
var a = [];
for (var i = 0; i < row;) {
a[i] ? a[i].push(arr.shift()) : (a[i] = []);
i = ++i % row ;
if (!arr.length) return a;
}
}
alert(JSON.stringify(foo(arr, 4)))
|
| Часовой пояс GMT +3, время: 10:30. |