22.11.2011, 18:35
|
Интересующийся
|
|
Регистрация: 19.11.2011
Сообщений: 11
|
|
Как рекурсивно пройтись по ассоциативному многомерному массиву?
Всем привет.
Имеется многомерный ассоциативный массив:
var Config = {
"БПИ": {
"30": {
"12": [ "2,5" ],
"24": [ "1,25" ],
"48": [ "0,65" ]
},
"60": {
"12": [ "5,0" ],
"24": [ "2,5" ],
"36": [ "1,5" ],
"48": [ "1,25" ]
},
"125": {
"12": [ "10" ],
"24": [ "5" ],
"48": [ "2,5" ]
},
"250": {
"12": [ "20,0" ],
"24": [ "10,0" ],
"48": [ "5,0" ]
}
}
};
Как можно разбить данный массив на несколько индексных массивов, в которых будут содержаться элементы каждого подуровня. То есть для нашего примера будут массивы со следующими элементами:
arr[0] = ["БПИ"];
arr[1] = ["30","60","125","250"];
arr[2] = ["12","24","48","12","24","36","48","12","24","48"];
arr[3] по аналогии. Вложенность может быть ещё больше(то есть появятся arr[4], arr[5] и т.д. вплоть до arr[10].
Последний раз редактировалось cbone, 23.11.2011 в 08:23.
|
|
23.11.2011, 11:05
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от cbone
|
Вложенность может быть ещё больше(то есть появятся arr[4], arr[5] и т.д. вплоть до arr[10].
|
Это не "вложеность"... Это просто "следующие элементы".
|
|
23.11.2011, 11:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от ksa
|
Это не "вложеность"... Это просто "следующие элементы".
|
Месье, вы буквоед.
Внимательно перечитайте первый пост, и уловите мысль, которую пытался донести до нас автор, а не бросайтесь автоматическими фразами как собака павлова
cbone,
Пишите.
for( in ) для перебора
и перебираем рекурсивно.
там не две строчки кода, поэтому мне лениво писать за вас.
|
|
23.11.2011, 11:28
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Чем дальше тем хуже.=\
Единственно правльный и логичный вариант в вашем случае уже был приведён в предыдущей теме, простые массивы, где заглавием является нулевой элемент.
Ив вообще, скжите для чего вы хотите это использовать и мы предложим вам подходящие варианты.
__________________
29375, 35
|
|
23.11.2011, 11:32
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от cbone
|
arr[0] = ["БПИ"];
arr[1] = ["30","60","125","250"];
arr[2] = ["12","24","48","12","24","36","48","12","24","48"];
|
Не совсем понятен алгоритм формирования того массива... Т.е. смущает элемент arr[2].
Ты записал туда все ключи "третьего уровня"...
Покажи как будет выглядеть твой массив на таком примере
var config = {
"БПИ": {
"30": {
"12": [ "2,5" ],
"24": [ "1,25" ],
"48": [ "0,65" ]
},
"60": {
"12": [ "5,0" ],
"24": [ "2,5" ],
"36": [ "1,5" ],
"48": [ "1,25" ]
},
"125": {
"12": [ "10" ],
"24": [ "5" ],
"48": [ "2,5" ]
},
"250": {
"12": [ "20,0" ],
"24": [ "10,0" ],
"48": [ "5,0" ]
}
},
"ВГИ": {
"10": {
"1": [ "2,5" ],
"2": [ "1,25" ],
"3": [ "0,65" ]
},
"20": {
"1": [ "5,0" ],
"2": [ "2,5" ],
"3": [ "1,5" ],
"4": [ "1,25" ]
},
"30": {
"1": [ "10" ],
"2": [ "5" ],
"3": [ "2,5" ]
},
"40": {
"1": [ "20,0" ],
"2": [ "10,0" ],
"3": [ "5,0" ]
}
}
};
|
|
23.11.2011, 11:33
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Gvozd
|
Месье, вы буквоед.
|
Термины - есть термины. Они означают то, что они означают...
|
|
23.11.2011, 12:04
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от ksa
|
Термины - есть термины. Они означают то, что они означают...
|
поиграем в вашу игру.
Сообщение от cbone
|
Вложенность может быть ещё больше(то есть появятся arr[4], arr[5] и т.д. вплоть до arr[10].
|
О чьей вложенности сейчас говорится?
По-моему из контекста вполне однозначно ясно, что подразумевается вложенность исходного многомерного массива, и что если его вложенность возрастет на уровень, два, или более, то появятся элементы arr[4], arr[5] и т.д. вплоть до arr[10].
Или для Вас этот контекст не столь очевиден?
|
|
23.11.2011, 13:38
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Gvozd
|
О чьей вложенности сейчас говорится?
|
Массива arr...
Сообщение от Gvozd
|
Или для Вас этот контекст не столь очевиден?
|
Получается что так.
|
|
23.11.2011, 13:59
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от cbone
|
Как можно разбить данный массив на несколько индексных массивов
|
Если я таки правильно понял проблемку - такой вот вариант например...
var config = {
"БПИ": {
"30": {
"12": [ "2,5" ],
"24": [ "1,25" ],
"48": [ "0,65" ]
},
"60": {
"12": [ "5,0" ],
"24": [ "2,5" ],
"36": [ "1,5" ],
"48": [ "1,25" ]
},
"125": {
"12": [ "10" ],
"24": [ "5" ],
"48": [ "2,5" ]
},
"250": {
"12": [ "20,0" ],
"24": [ "10,0" ],
"48": [ "5,0" ]
}
}
};
var a=[],b,c;
var i,j,k;
for(i in config) {
a[a.length]=new Array(i);
b=[];
c=[];
for( j in config[i]) {
b[b.length]=j;
for( k in config[i][j]) {
c[c.length]=k;
};
};
a[a.length]=b;
a[a.length]=c;
};
for (var i=0; i<a.length; i++) {
alert('a['+i+'] = '+a[i]);
}
|
|
23.11.2011, 22:10
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Вариант ...
var O = {
"БПИ": {
"30": {
"12": [ "2,5" ],
"24": [ "1,25" ],
"48": [ "0,65" ]
},
"60": {
"12": [ "5,0" ],
"24": [ "2,5" ],
"36": [ "1,5" ],
"48": [ "1,25" ]
},
"125": {
"12": [ "10" ],
"24": [ "5" ],
"48": [ "2,5" ]
},
"250": {
"12": [ "20,0" ],
"24": [ "10,0" ],
"48": [ "5,0" ]
}
}
};
function look(h) {
var b = [];
return function (f, a) {
var c, a = a || 0, d;
!b[a] && (b[a] = []);
for (d in f) if (b[a].push(d) && (c = f[d])&& typeof c=='object') {
var g = {}, e;
for (e in c) g[e] = c[e];
arguments.callee(g, a + 1)
}
return b
}(h)
};
var s=look(O).join('\n');
alert(s);
Последний раз редактировалось рони, 23.11.2011 в 22:23.
|
|
|
|