 
			
				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,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от 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,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Чем дальше тем хуже.=\ 
Единственно правльный и логичный вариант в вашем случае уже был приведён в предыдущей теме, простые массивы, где заглавием является нулевой элемент. 
 
Ив вообще, скжите для чего вы хотите это использовать и мы предложим вам подходящие варианты. 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.11.2011, 11:32
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от 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,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от 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,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Gvozd
			
		
	 | 
 
	| 
		О чьей вложенности сейчас говорится?
	 | 
 
	
 
 Массива  arr...
 
	
 
	| 
		
			Сообщение от Gvozd
			
		
	 | 
 
	| 
		Или для Вас этот контекст не столь очевиден?
	 | 
 
	
 
 Получается что так.    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.11.2011, 13:59
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от 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,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Вариант ...  
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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |