Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.07.2014, 14:27
Интересующийся
Отправить личное сообщение для ponyspy Посмотреть профиль Найти все сообщения от ponyspy
 
Регистрация: 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;
	}
}


В идеале алгоритм должен принимать параметр количества строк в матрице.

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 11.07.2014, 15:13
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 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)));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 11.07.2014, 15:21
Аватар для Tek
Tek Tek вне форума
Профессор
Отправить личное сообщение для Tek Посмотреть профиль Найти все сообщения от Tek
 
Регистрация: 22.02.2012
Сообщений: 212

Вариант по n - http://jsfiddle.net/HJ52r/4/

Последний раз редактировалось Tek, 11.07.2014 в 15:25.
Ответить с цитированием
  #4 (permalink)  
Старый 11.07.2014, 15:39
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Tek
Вариант по n
у меня тоже по n
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 11.07.2014, 17:51
Интересующийся
Отправить личное сообщение для ponyspy Посмотреть профиль Найти все сообщения от ponyspy
 
Регистрация: 27.09.2013
Сообщений: 15

Tek,
Огромное спасибо!

Вариант nerv_,
неправильно собирает матрицу
Ответить с цитированием
  #6 (permalink)  
Старый 12.07.2014, 00:27
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 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;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2014, 13:16
Интересующийся
Отправить личное сообщение для ponyspy Посмотреть профиль Найти все сообщения от ponyspy
 
Регистрация: 27.09.2013
Сообщений: 15

nerv_,
И снова неудача

Попробуйте указать в вашем варианте rowsCount = 5
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2014, 14:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от ponyspy
И снова неудача
Обоснуй.

Указал 5. Вариант
toMatrix разбил на 6 строк вместо 5
toMatrix2 разбил на 5 строк

Или ты знаешь способ разделить 12 на 5 без остатка?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 14.07.2014 в 14:41.
Ответить с цитированием
  #9 (permalink)  
Старый 14.07.2014, 15:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать объект в упорядоченный массив Shitbox2 Общие вопросы Javascript 15 09.06.2014 18:23
Как преобразовать выражение типа "1/2" oxpannik Общие вопросы Javascript 2 11.09.2013 11:15
Как создать многомерную матрицу????? Даша Соколова Общие вопросы Javascript 131 26.01.2012 13:00
Как можно достать файл из <input type="file"/> преобразовать файл в base 64 maxcab Events/DOM/Window 2 28.06.2011 22:52
Как текст из responseText преобразовать в теги? Бобр AJAX и COMET 24 26.02.2010 04:37