2016-04-26 11 views
0

Ich habe ein Objekt, das meine Daten enthält.Javascript Lookup-Tabelle

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

Wenn die Schlüsselwerte ganz sind, ist dies einfach.

DataSoccer [0] [1] // zurück 10.4

Das Problem ist, die Indizes sind jetzt nicht ganz

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

, damit ich eine Benutzereingabe zu bekommen, sagen 2,30 und das sollte 10,4 zurückkehren (der zweite Index)

im Moment habe ich eine if-Anweisung

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 
} 

Wie Sie können Stellen Sie sich vor, diese Lookup-Funktionalität mit einem if-else kann ziemlich umständlich werden und fragte sich, ob es einen besseren Weg gab?

+0

Sie haben ein Array mit nur 1 Element (mit all diesen Eigenschaften und Werte ein Objekt) bekam. Warum nicht ein Array verwenden, um sie zu halten? – enhzflep

+0

ok, ein Array wäre in Ordnung, aber es löst nicht das Aussehen Problem? – LeBlaireau

+0

Die Umwandlung in Zeichenfolge kann Nullen fallen lassen. 'DataSoccer [0] [" 1.3 "]'. –

Antwort

-1

try this

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

Fantastische Antwort. – LeBlaireau

+0

@ Dear-Downvoter lassen Sie mich bitte wissen, was ich verpasst habe? – gurvinder372

0

Lösung zum Abrufen eines Werts mit einer Iteration.

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>');

Dies ist eine Annotation Literale mit Nummer als Schlüssel zu widersprechen.

Die Eigenschaften von Objekten sind Zeichenketten, aber in diesem Fall sind sie Zahlen und werden dann in Zeichenketten umgewandelt.

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

der Benutzer möchte auf 2.30 zugreifen (die nicht Teil des Arrays ist) – lipp

+0

@lipp, siehe Bearbeiten. –

Verwandte Themen