我的問題是在javaScript中我想要一個城市的列表,每個城市都與一系列溫度相關聯,如曼徹斯特10-20,倫敦21-30。當用戶輸入溫度時,它會告訴相關的城市(將輸出用戶輸入的22倫敦)。將JavaScript映射到字符串
我最初的想法是有一個城市的String數組,然後將用戶輸入映射到城市的索引。因此,用戶輸入22將其映射到索引2(倫敦)。
但是以後輸入城市確實很難。
我的第二個想法是隻有一噸,如果其他語句從最低頻帶開始。
這些是我的兩個想法,我想知道什麼是解決這個問題的最好方法。
我的問題是在javaScript中我想要一個城市的列表,每個城市都與一系列溫度相關聯,如曼徹斯特10-20,倫敦21-30。當用戶輸入溫度時,它會告訴相關的城市(將輸出用戶輸入的22倫敦)。將JavaScript映射到字符串
我最初的想法是有一個城市的String數組,然後將用戶輸入映射到城市的索引。因此,用戶輸入22將其映射到索引2(倫敦)。
但是以後輸入城市確實很難。
我的第二個想法是隻有一噸,如果其他語句從最低頻帶開始。
這些是我的兩個想法,我想知道什麼是解決這個問題的最好方法。
做一個3維
array [City][low-temp][high-temp]
如果用戶輸入提供了運行所有城市和比較,如果輸入的是
low-temp < input < high-temp
,並返回符合條件的城市名單。
我不知道如果一個3D陣列是最好的方法,溫度不一定會從0開始,他們甚至可能會低於0 –
不要爲此使用數組。假設城市名稱是唯一的(如果不是,那麼你需要找到一種方法,讓他們通過州/省/其他層級標識符是唯一的)
var cityToTempRange = {
<city name>: {
low: <low temp>
, high: <high temp>
}
, <city name>: ...
};
這是您的數據得到更好的代表,將刪除需要遍歷你的數組來找到你正在尋找的城市。
要找到城市的名單,這將是最好使用一個實用程序庫,如lodash
function getCitiesFromTemp(requestedTemp) {
return _(cityToTempRange)
.pickBy(cityHasTemp)
.keys()
.value();
function cityHasTemp(rangeObj) {
return rangeObj.low <= requestedTemp
&& rangeObj.high >= requestedTemp;
}
}
,它與下面的測試
var cityToTempRange = {
Manchester: {
low: 10
, high: 20
}
, London: {
low: 21
, high: 30
}
};
console.log(getCitiesFromTemp(21));
打印['London']
另一種方式來做到這一點。
如果沒有重疊並且溫度範圍之間的差異是10,那麼只需創建一個城市陣列並根據低溫排列它們。
當用戶輸入一個值時,除以10得到城市/城市在該數組中的索引。
陣列可以像
myCitiesArray = [
{
cities: chicago, new york
low-temp: 11,
high-temp: 20
},
{
cities: xyz
low-temp: 21,
high-temp: 30
},
.
.
]
index = Math.floor(UserInput/10);
使用這個,如果你有負溫度範圍也
index = ~~(userInput/10);
您必須在邊界值的檢查。所以如果沒有餘數,index = index - 1;
index = userInput % 10 === 0 ? index-1 : index;
您可以在對象中使用數組,並迭代城市的數據。
我建議允許重疊溫度,因爲現實反映了這一點。
function getCities(temperature) {
return data.
filter(function (a) {
return temperature >= a.min && temperature <= a.max;
}).
map(function (a) {
return a.city;
});
}
var data = [
{ city: 'Manchester', min: 10, max: 20 },
{ city: 'London', min: 21, max: 30 }
];
console.log(getCities(22));
console.log(getCities(10));
謝謝你做了一些研究後,這似乎是最好的方法。 –
我是否正確理解這兩個城市將永遠不會重疊*溫度*範圍是多少? – domsson
瞭解['Array.prototype.filter'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – Bwaxxlo
@domdom yeah沒有重疊 –