Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   получить объект из многоуровневого объекта по значению или ключу (https://javascript.ru/forum/misc/60890-poluchit-obekt-iz-mnogourovnevogo-obekta-po-znacheniyu-ili-klyuchu.html)

Trippal 26.01.2016 11:05

получить объект из многоуровневого объекта по значению или ключу
 
Добрый день, уважаемые форумчане!
есть объект типа:
var options = {
     key1:value1,
     key2:value2,
     key3:{
              key31:value31,
              key32:value32
     },
     key4:{
              key41:value41,
              key42:value42
     }
}

вот такой образец объекта.
Итак, необходимо сказать компьютеру:
верни мне объект из объекта options значение которого равно "value1" из первой пары ключ/значение

я несколько раз пытался сделать через двойной тулуп луп с continion, но пока не получается и я не представляю, как написать такой код.
Подскажите пожалуйста, может кто-нибудь знает.

Заранее, спасибо!

рони 26.01.2016 11:26

Trippal, не совсем понятно условие задачи ...
var options = {
     key1:"value1",
     key2:"value2",
     key3:{
              key31:"value31",
              key32:"value32"
     },
     key4:{
              key41:"value41",
              key42:"value42"
     }
}
function fn(obj, value)
{
  var elem = null;
  Object.keys(obj).forEach(function (key) {
	if(typeof obj[key] == "object") elem = fn(obj[key], value);
    else if (obj[key] == value) elem = obj;
});
return elem
}
var a = fn(options,"value42")
alert(JSON.stringify(a));

Trippal 26.01.2016 11:46

var options = {
        service:"Open Street Map",
        drawStyleOptions : {
            color: "blue",
            weight: 1,
            opacity: 0.65,
        },
        osmSearchOptions:{
            name: "Oper Street Map",
            url: "http://nominatim.openstreetmap.org/search.php?",
            urlOptions:{
                q: "",
                format:"json",
                limit:10
            }
        },
        yandexSearchOptions:{
            name: "Yandex",
            url: "https://geocode-maps.yandex.ru/1.x/?",
            urlOptions:{
                geocode:"",
                format:"json"
            }
        },
        googleSearchOptions:{
            name: "Google",
            url: "https://maps.googleapis.com/maps/api/geocode/json?",
            urlOptions:{
                address: ""
                limit:10
            }
        }
    };

"дай мне объект из объекта options, [key]name, которого равно options.service"
в моем случае - это дай мне объект со значением ключа name "Open Street Map" и соответственно получаю osmSearchOptions,
если options.service меняется на "Google", я получаю googleSearchOptions,

спасибо за предыдущий ответ, но возвращает null

рони 26.01.2016 12:02

Поиск в обьекте
 
Trippal,
var options = {
        service:"Open Street Map",
        drawStyleOptions : {
            color: "blue",
            weight: 1,
            opacity: 0.65,
        },
        osmSearchOptions:{
            name: "Oper Street Map",
            url: "http://nominatim.openstreetmap.org/search.php?",
            urlOptions:{
                q: "",
                format:"json",
                limit:10
            }
        },
        yandexSearchOptions:{
            name: "Yandex",
            url: "https://geocode-maps.yandex.ru/1.x/?",
            urlOptions:{
                geocode:"",
                format:"json"
            }
        },
        googleSearchOptions:{
            name: "Google",
            url: "https://maps.googleapis.com/maps/api/geocode/json?",
            urlOptions:{
                address: "",
                limit:10
            }
        }
    };

function fn(obj, value)
{
  var elem = null;
  Object.keys(obj).forEach(function (key) {
	if(typeof obj[key] == "object") {var a = fn(obj[key], value); a && (elem = a)}
    else if (obj[key] == value) elem = obj;
});
return elem
}
var a = fn(options,"Oper Street Map")
alert(JSON.stringify(a));
a = fn(options,"Google")
alert(JSON.stringify(a));

рони 26.01.2016 12:03

Trippal,
ваш пост 3 -- строка 29 :nono:
выше новая функция поиска

Trippal 26.01.2016 12:20

Спасибо большущее!
и прошу прощения за запятую, не углядел при удалении, там много-много параметров ещё, и чтобы не загрязнять суть вопроса удалил их)


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