Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   список свойств из json(чуть сложнее тривиальной) (https://javascript.ru/forum/events/58354-spisok-svojjstv-iz-json-chut-slozhnee-trivialnojj.html)

Trippal 17.09.2015 13:10

список свойств из json(чуть сложнее тривиальной)
 
Добрый день уважаемые форумчане, подскажите пожалуйста, как получить список из следующего куска с внесением этих списков в функции:


Код:

{"layers":
        [
                {
                        "layercodename":"osm",
                        "layername": "Open Street Map",
                        "pathto":"'http://{s}.tile.osm.org/{z}/{x}/{y}.png'",
                        "layertype":"basemap",
                        "layertypefunction":"ltilelayer"
                },
                {
                        "layercodename":"olen",
                        "layername": "Треки оленей",
                        "pathto":"rerere.json",
                        "layertype":"overlay",
                        "layertypefunction":"casual",
                        "geometry":"polyline",
                        "color": "#000",
                        "width": 1
                }
        ]
}


на выходе хочется получить:
задача 1)
если "layertype":"basemap", то запихать в
var baseMaps = {
"layercodename"+':'+ "layername"
}
если "layertype":"overlay", то в
var overlayMaps = {
"layercodename"+':'+ "layername"
}

задача 2)
а так же проинициализировать объекты,
грубо говоря, если есть слой с "layertypefunction":"ltilelayer", то выполнить его инициализацию следующим образом
L.tileLayer('pathto', {}).addTo(map);
и если
"layertypefunction":"casual"
то произвести инициализацию уже другим образом:
L.geoJson("layercodename", {style: {color:"color", width:"width"}}).addTo(map);

Просто что-то тяжело дается вытащить свойства

laimas 17.09.2015 14:56

Для того чтобы если "layertype":"basemap", то..., а если если "layertype":"overlay", то..., то либо объект "layers" содержит в себе только один набор свойств, а не два как в примере, либо должна быть иная логика.

Trippal 17.09.2015 15:45

Цитата:

Сообщение от laimas (Сообщение 388967)
Для того чтобы если "layertype":"basemap", то..., а если если "layertype":"overlay", то..., то либо объект "layers" содержит в себе только один набор свойств, а не два как в примере, либо должна быть иная логика.

предполагаю, что будет функция SWITCH, а в ней перебор вариантов и реализация инициализации в зависимости от параметров

laimas 17.09.2015 15:54

Не обязательно switch, не в этом дело. Вопрос поставлен или/или, в наборов свойств 2. Что это означает - 1) обойти эти наборы проверив условия в них или 2) в каком то из наборов проверить условия?

Если первое, обойти циклом эти два набора проверяя необходимые свойства, если второе, берите необходимый набор. Например, если имя этого объекта равно obj, то свойство первого условия первого первого набора, это obj.layers[0].layertype.

Trippal 17.09.2015 17:49

Цитата:

Сообщение от laimas (Сообщение 388974)
Не обязательно switch, не в этом дело. Вопрос поставлен или/или, в наборов свойств 2. Что это означает - 1) обойти эти наборы проверив условия в них или 2) в каком то из наборов проверить условия?

Если первое, обойти циклом эти два набора проверяя необходимые свойства, если второе, берите необходимый набор. Например, если имя этого объекта равно obj, то свойство первого условия первого первого набора, это obj.layers[0].layertype.

несколько раз внимательно прочитал...не понял)

laimas 17.09.2015 17:59

Чего именно? Ваш объект, это массив объектов (то есть два набора свойств), нужно в каждом проверить условия (значения свойств)? Ну так обходом в цикле получайте их и проверяйте. Как получить значение свойства layertype первого набора показано.
Что такое цикл думаю известно, что еще нужно?

Trippal 17.09.2015 18:07

спасибо, буду разбираться!)


Часовой пояс GMT +3, время: 07:42.