Или просто используйте if (states[state].indexOf(cityName) !== -1)
getStateByCityName(cityName) {
var statesRaw = sessionStorage.getitem('states');
var states = JSON.parse(statesRaw);
for (var state in states) {
if (states[state].indexOf(cityName) !== -1) {
return state;
}
}
return false;
}
Или в ECMAScript стиле 5 петель :))
getStateByCityName(cityName) {
var statesRaw = sessionStorage.getitem('states');
var states = JSON.parse(statesRaw);
Object.keys(states).forEach(function(state) {
if (states[state].indexOf(cityName) !== -1) {
return state;
}
})
return false;
}
Есть много способов (см другие ответы тоже), так что давайте взглянем на производительность.
Во-первых, чтобы перебирать свой объект http://jsperf.com/object-keys-vs-for-in-with-closure/3
В моем браузере быстрый случай был Object.keys for loop
, так
getStateByCityName(cityName) {
var statesRaw = sessionStorage.getitem('states');
var states = JSON.parse(statesRaw);
var states_keys = Object.keys(states);
for (var i = 0, l = states_keys.length; i < l; i++) {
// check if city exists
}
return false;
}
Далее нам нужно проверить, если город существует в этом состоянии. Я вижу два способа сделать это: 1), а другие предложил итерацию с for
петли 2) шахта предложила .indexOf()
http://jsperf.com/js-for-loop-vs-array-indexof/2 в моем браузере indexOf()
получил лучшие результаты, поэтому окончательную функцию
getStateByCityName(cityName) {
var statesRaw = sessionStorage.getitem('states');
var states = JSON.parse(statesRaw);
var states_keys = Object.keys(states);
for (var i = 0, l = states_keys.length; i < l; i++) {
if (states[states_keys[i]].indexOf(cityName) !== -1) {
return states_keys[i];
}
}
return false;
}
И как кто-то предложил использовать try/catch
getStateByCityName(cityName) {
var states = {};
try {
states = JSON.parse(sessionStorage.getitem('states'));
} catch (e) {
}
var states_keys = Object.keys(states);
for (var i = 0, l = states_keys.length; i < l; i++) {
if (states[states_keys[i]].indexOf(cityName) !== -1) {
return states_keys[i];
}
}
return false;
}
Hello Manwal, я в значительной степени новичок в программировании на javascript. Я только начал учиться. Так что я не очень старался, так как не был уверен, что делать. –
nit-pick: у вас нет массива, у вас есть строка JSON, что при повторном анализе будет задан _объект_. Объект не совпадает с массивом –
Большое спасибо за все ваши ответы за очень короткое время. Я очень благодарен. Я пробовал код «Pavel» и «belhyk», и он дает мне результаты, как ожидалось. Только один вопрос.В будущем строка json растет и содержит столько данных, любой из этих ответов, приведенных ниже, должен работать, не так ли? –