Из объекта в одномерный массив
Здравствуйте уважаемые форумчане!
Столкнулся я с задачкой, которая вогнала меня в тупик: есть объект: 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* Подозреваю, что рекурсия мне поможет - но, видимо скилов не хватает применить ее правильно к этому примеру. Камрады, не прошу писать код за меня, подскажите на пальцах алгоритм зы: код не прикладываю, так как у меня он даже приблизительно правильно не работает |
Цитата:
|
Эта вся лабуда делается для фильтра по параметрам
есть url прмерно такого вида: Код:
#!/arr1=a_val1+a_val2&arr2=a2_val1+a2_val2+a2_val3 а у элементов в доме есть аттрибуты, типа : data-arr1='a_val1' data-arr2='a2_val3' а массив на выходе содержал бы аттрибуты тех элементов, которые подходят под эти параметры |
Цитата:
объект: { [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* |
L0k1,
:write: 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')) |
Рони, спасибо!
Отрабатывает так как надо, буду вникать в код - я его не полностью понимаю, выше моего уровня. |
Цитата:
|
Уважаемый KSA, это не листинг, это наглядное представление. Я пытался максимально прозрачно объяснить, что именно мне нужно.
Рони понял и помог, за что ему огромное спасибо. А вы, судя по вашим постам на форуме, в основном придираетесь к стилю изложения, вместо того, чтобы сказать по существу вопроса. |
А если на входе все-таки объект, а не массив массивов, то код рони можно немного дополнить:
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')) |
Да, на входе все-таки объект - и я его дополнил, практически так-же как и вы.
Спасибо за участие. |
Часовой пояс GMT +3, время: 00:18. |