2016-07-19 8 views
0

からCに変換するjsonオブジェクトで、input(動的に変化する)の値をどうやって入れますか?私の思考が悪い場合は、どうすればそのような変換を実際に書くべきですか?jsonの変換温度

私は考えていな方法がある(CにすなわちK):

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 />

+0

は '常にfromSelectType' 1ではないでしょうか? btw、これは最後に沸騰しているものです、[戦略パターン](https://en.wikipedia.org/wiki/Strategy_pattern)...ちょうどスティーン... –

+0

btw、CodeReviewは良い場所かもしれませんこの質問のために... –

+1

OPは意図したとおりに動作しているコードのレビューを求めるのではなく、何かをする方法についてOPがヘルプを求めているようだから、これはCode Reviewには適していません。 – Phrancis

答えて

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) 
+0

ああ、私はそこに関数を置くことができるか分からなかったx)それを説明してくれてありがとう。感謝します。 – nehel

+0

@nehelなぜ人々がこれが本当にJSONオブジェクトであるのか、それとも普通の古いjavascriptオブジェクトであるのかを質問していたのです。 JSONでは関数を渡すのに賢明な方法はありませんが、javascriptオブジェクトには何かを格納できます。 – Jamiec