JavaScript将数字映射到字符串

时间:2017-03-06 14:13:18

标签: javascript dictionary

我的问题在于javaScript我想要一个城市列表,每个城市与一系列温度相关联,如曼彻斯特10-20,伦敦21-30。当用户输入温度时,它会告知相关城市(用户输入的22伦敦将被输出)。

我最初的想法是拥有一个城市的String数组,然后将用户输入映射到城市的索引。因此,用户输入22将其映射到索引2(伦敦)。

但稍后输入一个城市将非常困难。

我的第二个想法只是从最低频段开始的if else语句。

这是我的两个想法,我想知道解决这个问题的最佳方法是什么。

4 个答案:

答案 0 :(得分:1)

制作3维

array [City][low-temp][high-temp]

如果用户提供输入,则运行所有城市并比较输入是否为

low-temp < input < high-temp

并返回符合条件的城市列表。

答案 1 :(得分: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']

答案 2 :(得分:0)

另一种方法。

如果没有重叠且温度范围之间的差异为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;

答案 3 :(得分:0)

您可以使用包含对象的数组并迭代城市的数据。

我建议允许重叠温度,因为现实反映了这一点。

&#13;
&#13;
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));
&#13;
&#13;
&#13;