Страница 1 из 1
					
				OpenLayers: итерация по слоям
				Добавлено: 10 ноя 2010, 13:27
				 Denis Rykov
				Допустим, у нас есть 2 слоя lay1 и lay2. Как можно с помощью цикла for ... in пройтись по свойствам этих слоёв? Попробовал конструкцию вида for l in [lay1,lay2], но она совершает обход по индексам массива, а не по элементам. Остановился на варианте вида:
Код: Выделить всё
k={'one':'lay1', 'two':'lay2'}
for (l in k){
    alert(k[l].name);
} 
Можно ли как-то обойтись без создания хэша?
 
			 
			
					
				Re: OpenLayers: итерация по слоям
				Добавлено: 10 ноя 2010, 14:53
				 Mavka
				Вы хотите как в python?
В js так не получится. Ваш вариант тоже не плох, но я бы заменил хэш на массив:
P.S. Нашел интерпретатор js как раз на такой случай - 
Interpreter. А вот offline только за денежку :(
 
			 
			
					
				Re: OpenLayers: итерация по слоям
				Добавлено: 10 ноя 2010, 16:11
				 Denis Rykov
				Спасибо, посмотрю, что за интерпретатор.
Mavka писал(а):Вы хотите как в python?
 
Угу, с питоном побольше опыта, привык к такому поведению.
 
			 
			
					
				Re: OpenLayers: итерация по слоям
				Добавлено: 11 ноя 2010, 06:32
				 Denis Rykov
				Кстати, какой из вариантов обхода массива предпочтительней или они равнозначны (lay в данном случае векторный слой)?
Код: Выделить всё
for (var i = 0; i<lay.features.length; i++) 
или
 
			 
			
					
				Re: OpenLayers: итерация по слоям
				Добавлено: 11 ноя 2010, 12:55
				 Mavka
				По-моему - без разницы, в тексте стандарта рекомендаций не нашел.
Что то подобное вашей задумке есть в JavaScript 1.7, кажется через оператор let() можно провернуть подобную штуку. Но 1.7 работает только в FireFox, а вариант 1.8 хоть и стал стандартом ECMAScript version 5, но еще не реализован полностью в других браузерах.
			 
			
					
				Re: OpenLayers: итерация по слоям
				Добавлено: 11 ноя 2010, 18:45
				 Mavka
				Есть, нашел! Вот так это делается:
Код: Выделить всё
a = ['a', 'b', 'c'];
a.forEach(function(a) {
      alert(a);
});  
Со слоями:
Код: Выделить всё
lay1 = {name: 'aaa', count: 1};
lay2 = {name: 'bbb', count: 2};
arr = [lay1, lay2];
arr.forEach(function(arr) {
      alert(arr.name + ' # ' + arr.count);
}); 
А еще хорошую консоль нашел, для FireFox - 
Execute JS.