Преобразовать вектор в матрицу
Всем привет, я столкнулся с задачей и не понимаю как ее решить...
Есть массив 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, время: 03:32. |