05.11.2013, 19:32
|
|
Интересующийся
|
|
Регистрация: 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*
Подозреваю, что рекурсия мне поможет - но, видимо скилов не хватает применить ее правильно к этому примеру.
Камрады, не прошу писать код за меня, подскажите на пальцах алгоритм
зы: код не прикладываю, так как у меня он даже приблизительно правильно не работает
|
|
05.11.2013, 19:38
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от L0k1
|
количество arr* в obj может быть любым
|
Тогда непонятно как нужно составлять комбинации если например количество arr* три, или больше. Покажи пример.
__________________
В личку только с интересными предложениями
|
|
05.11.2013, 19:45
|
|
Интересующийся
|
|
Регистрация: 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.
|
|
05.11.2013, 21:02
|
|
Интересующийся
|
|
Регистрация: 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*
|
|
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'))
|
|
05.11.2013, 22:29
|
|
Интересующийся
|
|
Регистрация: 05.11.2013
Сообщений: 12
|
|
Рони, спасибо!
Отрабатывает так как надо, буду вникать в код - я его не полностью понимаю, выше моего уровня.
|
|
05.11.2013, 23:43
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от L0k1
|
объект:
{
[a1,a2,a3],
[b1,b2],
[c1,c2]
}
|
Это не объект. Это синтаксическая ошибка...
|
|
06.11.2013, 00:24
|
|
Интересующийся
|
|
Регистрация: 05.11.2013
Сообщений: 12
|
|
Уважаемый KSA, это не листинг, это наглядное представление. Я пытался максимально прозрачно объяснить, что именно мне нужно.
Рони понял и помог, за что ему огромное спасибо.
А вы, судя по вашим постам на форуме, в основном придираетесь к стилю изложения, вместо того, чтобы сказать по существу вопроса.
|
|
06.11.2013, 00:59
|
|
Профессор
|
|
Регистрация: 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'))
|
|
06.11.2013, 01:15
|
|
Интересующийся
|
|
Регистрация: 05.11.2013
Сообщений: 12
|
|
Да, на входе все-таки объект - и я его дополнил, практически так-же как и вы.
Спасибо за участие.
|
|
|
|