26.01.2016, 11:05
|
Интересующийся
|
|
Регистрация: 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.
|
|
26.01.2016, 11:26
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
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));
|
|
26.01.2016, 11:46
|
Интересующийся
|
|
Регистрация: 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
|
|
26.01.2016, 12:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Поиск в обьекте
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.
|
|
26.01.2016, 12:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Trippal,
ваш пост 3 -- строка 29
выше новая функция поиска
|
|
26.01.2016, 12:20
|
Интересующийся
|
|
Регистрация: 28.04.2015
Сообщений: 26
|
|
Спасибо большущее!
и прошу прощения за запятую, не углядел при удалении, там много-много параметров ещё, и чтобы не загрязнять суть вопроса удалил их)
|
|
|
|