получить объект из многоуровневого объекта по значению или ключу
Добрый день, уважаемые форумчане!
есть объект типа: var options = { key1:value1, key2:value2, key3:{ key31:value31, key32:value32 }, key4:{ key41:value41, key42:value42 } } вот такой образец объекта. Итак, необходимо сказать компьютеру: верни мне объект из объекта options значение которого равно "value1" из первой пары ключ/значение я несколько раз пытался сделать через двойной Подскажите пожалуйста, может кто-нибудь знает. Заранее, спасибо! |
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)); |
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 |
Поиск в обьекте
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)); |
Trippal,
ваш пост 3 -- строка 29 :nono: выше новая функция поиска |
Спасибо большущее!
и прошу прощения за запятую, не углядел при удалении, там много-много параметров ещё, и чтобы не загрязнять суть вопроса удалил их) |
Часовой пояс GMT +3, время: 22:57. |