2016-04-26 3 views
0

私のデータを保持するオブジェクトがあります。JavaScriptのルックアップテーブル

DataSoccer: [{ 0: '0.00', 1: '10.4', 2:'100.5', 3:'15.3', 4:'11.2', 5:'15.9'}] 

この値が全体である場合、これは単純です。

DataSoccer [0] [1] 10.4

問題は、インデックスが私は(、ユーザー入力を取得2.30を言うと、それは10.4を返す必要があり、今

DataSoccer: [{ 0: '0.00', 1.30: '10.4', 2.40:'100.5', 3.40:'15.3', 4.5:'11.2', 5:'15.9'}] 

全体ではないですが返されます//現時点では2番目のインデックス)

私は、if文

if (value == 0 { 
return 0.00 
} 
else if (value <= 1.30) { 
    return 10.4 
} 

else if (value > 1.30 value < 2.40) { 
    return 100.5 
} 

することができますように持っていますif-elseを使ってこのルックアップ機能を想像してみると、かなり面倒なことがあり、より良い方法があるかどうか疑問に思っていましたか?

+0

を試してみてください。配列を使ってそれらを保持してみませんか? – enhzflep

+0

OK、配列は問題ありませんが、外観の問題は解決していませんか? – LeBlaireau

+0

文字列への変換がゼロを削除している可能性があります。 'DataSoccer [0] [" 1.3 "]'。 –

答えて

-1

あなたが唯一の1つの要素(これらのプロパティと値のすべてを持つオブジェクト)の配列を持っているこの

var DataSoccer = [{ 0: '0.00', 1.30: '10.4', 2.40:'100.5', 3.40:'15.3', 4.5:'11.2', 5:'15.9'}]; 
 

 
//sort all the keys in DataSoccer[0] 
 
var sortedKeys = Object.keys(DataSoccer[0]).sort(function(a,b){ return parseFloat(a) - parseFloat(b) }); 
 

 
//get value lesser than 2.3 which is 1.3 
 
var smallerKey = sortedKeys.filter(function(val){ return val < 2.3}).pop(); 
 

 
//get next value which is 2.4 after 1.3 
 
var actualKey = sortedKeys[sortedKeys.indexOf(smallerKey) + 1]; 
 

 
//alerting the value at 2.4 
 
alert("value is " + DataSoccer[0][actualKey]); //access value ar 2.4

+0

すばらしい答え。 – LeBlaireau

+0

@ dear-downvoter私が逃したものを教えてください。 – gurvinder372

0

1回の反復で値を取得するソリューション。

function getValue(p) { 
 
    return object[Object.keys(object).reduce(function (r, k) { 
 
     return k <= r || k > p ? r: k; 
 
    }, undefined)]; 
 
} 
 

 
var object = { 0: '0.00', 1.30: '10.4', 2.40: '100.5', 3.40: '15.3', 4.5: '11.2', 5: '15.9' }; 
 

 
document.write('<pre>' + JSON.stringify(getValue(2.3), 0, 4) + '</pre>');

これは、キーとしての数でリテラルをオブジェクトへの注釈です。

オブジェクトのプロパティは文字列ですが、この場合は数値で、文字列に変換されます。

var DataSoccer = [{ 0: '0.00', 1.30: '10.4', 2.40:'100.5', 3.40:'15.3', 4.5:'11.2', 5:'15.9'}]; 
 
document.write('<pre>' + JSON.stringify(DataSoccer, 0, 4) + '</pre>'); 
 
document.write(DataSoccer[0]['2.4']);

+1

ユーザが2.30にアクセスしたい(配列の一部ではない) – lipp

+0

@lipp、editを参照してください。 –

関連する問題