2016-04-26 32 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

的問題是,現在的指數是不是整個

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

,所以我得到的用戶輸入,比如2.30,這應該返回10.4(第二個索引)

目前,我有一個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

你得只有1元(與所有這些屬性和值的對象)的數組。爲什麼不使用數組來保存它們? – enhzflep

+0

好吧,一個數組會很好,但它不能解決外觀問題? – LeBlaireau

+0

轉換爲字符串可能會丟零。 'DataSoccer [0] [ 「1.3」]'。 –

回答

-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

通過一次迭代獲取值的解決方案。

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,請參閱編輯。 –