Из объекта в одномерный массив
Здравствуйте уважаемые форумчане!
Столкнулся я с задачкой, которая вогнала меня в тупик: есть объект:
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, время: 13:19. |