Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2013, 19:32
Аватар для L0k1
Интересующийся
Отправить личное сообщение для L0k1 Посмотреть профиль Найти все сообщения от L0k1
 
Регистрация: 05.11.2013
Сообщений: 12

Из объекта в одномерный массив
Здравствуйте уважаемые форумчане!

Столкнулся я с задачкой, которая вогнала меня в тупик:

есть объект:
obj  = {
    arr1: [
               'a1_val1', 
               'a1_val2'
            ], 
    arr2: [
               'a2_val1', 
               'a2_val2', 
               'a2_val3'
            ]
}


его нужно перегнать в одномерный массив со строками :

ansver = [
               'a1_val1 a2_val1', 
               'a1_val1 a2_val2',
               'a1_val1 a2_val3 ', 
               'a1_val2 a2_val1', 
               'a1_val2 a2_val2',
               'a1_val2 a2_val3 '
]


количество arr* в obj может быть любым, как и количество элементов в массивах arr*

Подозреваю, что рекурсия мне поможет - но, видимо скилов не хватает применить ее правильно к этому примеру.

Камрады, не прошу писать код за меня, подскажите на пальцах алгоритм

зы: код не прикладываю, так как у меня он даже приблизительно правильно не работает
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2013, 19:38
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от L0k1
количество arr* в obj может быть любым
Тогда непонятно как нужно составлять комбинации если например количество arr* три, или больше. Покажи пример.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2013, 19:45
Аватар для L0k1
Интересующийся
Отправить личное сообщение для L0k1 Посмотреть профиль Найти все сообщения от L0k1
 
Регистрация: 05.11.2013
Сообщений: 12

Эта вся лабуда делается для фильтра по параметрам

есть url прмерно такого вида:
Код:
 #!/arr1=a_val1+a_val2&arr2=a2_val1+a2_val2+a2_val3
из этого url, собственно, и получается объект obj

а у элементов в доме есть аттрибуты, типа : data-arr1='a_val1' data-arr2='a2_val3'

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

Последний раз редактировалось L0k1, 05.11.2013 в 19:48.
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2013, 21:02
Аватар для L0k1
Интересующийся
Отправить личное сообщение для L0k1 Посмотреть профиль Найти все сообщения от L0k1
 
Регистрация: 05.11.2013
Сообщений: 12

Сообщение от danik.js Посмотреть сообщение
Тогда непонятно как нужно составлять комбинации если например количество arr* три, или больше. Покажи пример.
попробую еще разок, может и самому понятнее станет
объект:
{
 [a1,a2,a3],
 [b1,b2],
 [c1,c2]
}


и тут ляськи-масяськи, ахалай-махалай и в массив:

[
 " a1 b1 c1 ",
 " a1 b1 c2 ",
 " a1 b2 c1 ",
 " a1 b2 c2 ",
 " a2 b1 c1 ",
 " a2 b1 c2 ",
 " a2 b2 c1 ",
 " a2 b2 c2 ",
 " a3 b1 c1 ",
 " a3 b1 c2 ",
 " a3 b2 c1 ",
 " a3 b2 c2 ",
]


вот так для 3х arr*
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2013, 22:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

L0k1,

var arr = [
 ['a1','a2','a3'],
 ['b1','b2'],
 ['c1','c2']
]
;
function go(b) {
    for (var a = 0; a < b.length - 1; a++) {
        for (var c = [], d = 0 ; d < b[a].length; d++)
            for (var e = 0; e < b[a + 1].length; e++) c.push(b[a][d] + " " + b[a + 1][e]);
        b[a + 1] = c
    }
    return c
};
alert(go(arr).join('\n'))
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2013, 22:29
Аватар для L0k1
Интересующийся
Отправить личное сообщение для L0k1 Посмотреть профиль Найти все сообщения от L0k1
 
Регистрация: 05.11.2013
Сообщений: 12

Рони, спасибо!
Отрабатывает так как надо, буду вникать в код - я его не полностью понимаю, выше моего уровня.
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2013, 23:43
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от L0k1 Посмотреть сообщение
объект:
{
 [a1,a2,a3],
 [b1,b2],
 [c1,c2]
}
Это не объект. Это синтаксическая ошибка...
Ответить с цитированием
  #8 (permalink)  
Старый 06.11.2013, 00:24
Аватар для L0k1
Интересующийся
Отправить личное сообщение для L0k1 Посмотреть профиль Найти все сообщения от L0k1
 
Регистрация: 05.11.2013
Сообщений: 12

Уважаемый KSA, это не листинг, это наглядное представление. Я пытался максимально прозрачно объяснить, что именно мне нужно.

Рони понял и помог, за что ему огромное спасибо.
А вы, судя по вашим постам на форуме, в основном придираетесь к стилю изложения, вместо того, чтобы сказать по существу вопроса.
Ответить с цитированием
  #9 (permalink)  
Старый 06.11.2013, 00:59
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

А если на входе все-таки объект, а не массив массивов, то код рони можно немного дополнить:
var obj  = {
    arr1: [
               'a1_val1', 
               'a1_val2'
            ], 
    arr2: [
               'a2_val1', 
               'a2_val2', 
               'a2_val3'
            ]
}
var arr = [];
for (var key in obj) {
	arr.push(obj[key]);
}
function go(b) {
    for (var a = 0; a < b.length - 1; a++) {
        for (var c = [], d = 0 ; d < b[a].length; d++)
            for (var e = 0; e < b[a + 1].length; e++) c.push(b[a][d] + " " + b[a + 1][e]);
        b[a + 1] = c
    }
    return c
};
alert(go(arr).join('\n'))
Ответить с цитированием
  #10 (permalink)  
Старый 06.11.2013, 01:15
Аватар для L0k1
Интересующийся
Отправить личное сообщение для L0k1 Посмотреть профиль Найти все сообщения от L0k1
 
Регистрация: 05.11.2013
Сообщений: 12

Да, на входе все-таки объект - и я его дополнил, практически так-же как и вы.
Спасибо за участие.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу вытащить массив из объекта по указателю из самого объекта bunta Общие вопросы Javascript 3 09.09.2010 18:44
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30
Как отличить массив от объекта Ilyan Общие вопросы Javascript 3 20.04.2010 23:08
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00