或簡單地使用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()
建議.indexOf()
http://jsperf.com/js-for-loop-vs-array-indexof/2 得到更好的效果,所以最終的功能
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;
}
你好Manwal,我幾乎是一個JavaScript編程的新手。我剛開始學習。所以沒有多少嘗試,因爲我不知道該怎麼做。 –
nit-pick:你沒有數組,你有一個JSON字符串,當解析時會產生一個_object_。一個對象與數組不一樣 –
非常感謝您在很短的時間內給出的所有答案。我非常感謝。我嘗試了「Pavel」和「belhyk」的代碼,並按預期給我提供了結果。只是一個問題。在將來,json字符串會增長很多幷包含如此多的數據,下面給出的這些答案中的任何一個都應該起作用,不是嗎? –