11.07.2014, 14:27
|
Интересующийся
|
|
Регистрация: 27.09.2013
Сообщений: 15
|
|
Преобразовать вектор в матрицу
Всем привет, я столкнулся с задачей и не понимаю как ее решить...
Есть массив
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;
}
}
В идеале алгоритм должен принимать параметр количества строк в матрице.
Спасибо!
|
|
11.07.2014, 15:13
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
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)));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
11.07.2014, 15:21
|
|
Профессор
|
|
Регистрация: 22.02.2012
Сообщений: 212
|
|
Последний раз редактировалось Tek, 11.07.2014 в 15:25.
|
|
11.07.2014, 15:39
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Tek
|
Вариант по n
|
у меня тоже по n
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
11.07.2014, 17:51
|
Интересующийся
|
|
Регистрация: 27.09.2013
Сообщений: 15
|
|
Tek,
Огромное спасибо!
Вариант nerv_,
неправильно собирает матрицу
|
|
12.07.2014, 00:27
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от ponyspy
|
Вариант nerv_,
неправильно собирает матрицу
|
Это потому, что он называется group Что-то меня клинит на этой неделе))) Надеюсь, только на этой
До кучи еще один вариант:
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;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
14.07.2014, 13:16
|
Интересующийся
|
|
Регистрация: 27.09.2013
Сообщений: 15
|
|
nerv_,
И снова неудача
Попробуйте указать в вашем варианте rowsCount = 5
|
|
14.07.2014, 14:38
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от ponyspy
|
И снова неудача
|
Обоснуй.
Указал 5. Вариант
toMatrix разбил на 6 строк вместо 5
toMatrix2 разбил на 5 строк
Или ты знаешь способ разделить 12 на 5 без остатка?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 14.07.2014 в 14:41.
|
|
14.07.2014, 15:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
ponyspy,
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)))
Последний раз редактировалось рони, 14.09.2014 в 22:03.
|
|
|
|