在json转换温度

时间:2016-07-19 15:39:01

标签: javascript jquery json

如何将input(动态变化)中的值放在json对象中,以便将K转换为C?或者,如果我的想法不好,我该怎么写这种转换呢?

我的想法是(即KC):

var quantities= [
    {
            'name': 'Temperature',
            'properties': [
                {
                    'name': 'Kelwin',
                    'symbol': 'K',
                    'units': {
                        'K': 1,
                        'C': 'inputValue + 273.15',
                        'F': '(inputValue + 459.67)*5/9'
                    }
                },
                {
                    'name': 'Celsius',
                    'symbol': 'C',
                    'units': {
                        'K': 'inputValue - 273.15',
                        'C': 1,
                        'F': '(inputValue - 32)*5/9'
                    }
                },
                {
                    'name': 'Fahrenheit',
                    'symbol': 'F',
                    'units': {
                        'K': 'inputValue * 9/5-459.67',
                        'C': 'inputValue * 9/5+32',
                        'F': 1
                    }
                }
            ]
        }
     ]
    
    var optionsIndex = $('select.from option:selected').index();
    var from = $('select.from option:selected').val(); 
    var to = $('select.to option:selected').val();

    var fromSelectTypeValue = quantities[0].properties[optionsIndex].units[from];
    var toSelectTypeValue = quantities[0].properties[optionsIndex].units[to];

    var result = fromSelectTypeValue  * toSelectTypeValue;
    //fromSelectType = 1 (because K is choosen in first select element)
    //toSelectTypeValue = 'inputValue + 273.15' (because C is choosen in second select element)

    var $inputs = $('.inputValue, select.from, select.to');
      $inputs.on('keyup change', function () {
            $('.result').val(result);
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" class="inputValue" placeholder="Insert value" />
<br />
<select class="from">
  <option value="K">Kelvin</option>
  <option value="C">Celsius</option>
  <option value="F">Fahrenheit</option>
</select>

<select class="to">
  <option value="K">Kelvin</option>
  <option value="C">Celsius</option>
  <option value="F">Fahrenheit</option>
</select> 
<br />

<input type="numer" class="result" placeholder="Result" readonly />

1 个答案:

答案 0 :(得分:2)

你的完全错误的方式 - 你没有把你的价值“动态地放到你的JSON中”,你使你的javascript配置对象能够处理动态值。

例如,您的转换应该是实际的功能,而不是那些功能的文本表示(很难安全地“执行”)。

var quantities= [
   {
        'name': 'Temperature',
        'properties': [
            {
                'name': 'Kelwin',
                'symbol': 'K',
                'units': {
                    'K': function(input){ return input; },
                    'C': function(input){ return input + 273.15; },
                    'F': function(input){ return (input + 459.67)*5/9; }
                }
            },
      ....

然后,假设您知道如何从对象中拉出正确的函数,您只需执行函数:

var kToC = quantities[0].properties[0].units.C; // assume you know how to look this up
var c = kToC(123); // execute the function (convert 123 k to c)