Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2016, 11:05
Интересующийся
Отправить личное сообщение для Trippal Посмотреть профиль Найти все сообщения от Trippal
 
Регистрация: 28.04.2015
Сообщений: 26

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

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

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

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

Последний раз редактировалось Trippal, 26.01.2016 в 11:11.
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2016, 11:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,073

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));
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2016, 11:46
Интересующийся
Отправить личное сообщение для Trippal Посмотреть профиль Найти все сообщения от Trippal
 
Регистрация: 28.04.2015
Сообщений: 26

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
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2016, 12:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,073

Поиск в обьекте
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:27.
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2016, 12:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,073

Trippal,
ваш пост 3 -- строка 29
выше новая функция поиска
Ответить с цитированием
  #6 (permalink)  
Старый 26.01.2016, 12:20
Интересующийся
Отправить личное сообщение для Trippal Посмотреть профиль Найти все сообщения от Trippal
 
Регистрация: 28.04.2015
Сообщений: 26

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ключ объекта ссылка на объект Brainsss Общие вопросы Javascript 10 08.12.2014 18:27
Как получить список пользовательских функций объекта window? Маэстро Events/DOM/Window 13 03.07.2010 13:20
Объект как свойство объекта Cooskon Общие вопросы Javascript 6 16.02.2010 21:41
Получить объект содержащий caller no_alex Общие вопросы Javascript 14 20.03.2009 21:37
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00