2016-11-14 3 views
0

Ich benutze d3.json, um ein Dataset zu dekodieren, in dem der Schlüssel/die Werte unbekannt sind. Ich muss die Zahlenwerte in Zahlen umwandeln und den Rest in Ruhe lassen.JSON-Werte in Zahl konvertieren, wenn Schlüssel/Werte dynamisch sind

Meine JSON sieht wie folgt aus:

[{"file":"morning","row_total":"1095935","attr1":"79","attr2":""}, 
{"file":"noon","row_total":"221167","attr1":"174","attr2":"114"}, 
{"file":"night","row_total":"1317102","attr1":"253","attr2":"114"}] 

Es ist aus einer PHP-Datei mit d3.json lesen. Für jeden Wert, der (ohne werfen NaN) kann, muss ich eine Zahl (d3 verwendet das + Symbol für diese) konvertieren:

d3.json("getData.php", function(error, data) { 
    if (error) throw error; 

    data.forEach(function(d) { 
     if(!isNaN(d.i = +d.i) 
      d.i = +d.i 
     )}) 

Offensichtlich gibt es ein Problem mit meinem Test/Looping-Logik. Ich würde wirklich eine Anleitung hier schätzen.

Vielen Dank!

Antwort

1

isNaN auf Nummer Strings arbeiten - der Zuweisungsoperator ist wahrscheinlich Code aus werfen - Sie können einfach tun:

if(!isNaN(d.i)) { 

Sie sind auch eine zweite ) auf if Aussage mit dem Scheck isNaN fehlt.

isNaN("1") //false 
isNaN("x") //true 

Angenommen, ich hätte mehr lesen sollen. Sie benötigen 2 Schleifen - eine, um Ihr Array zu loopen, die andere, um die einzelnen Schlüssel/Werte des Objekts zu testen:

+0

tymeJV, danke für den Tipp. Ich bin noch nicht ganz da ... die Daten werden nicht transformiert. Hier ist, wofür ich meinen Code geändert habe: data.forEach (function (d) {if (! IsNaN (d)) {d = + d}}); – Phoebe

+0

@Phoebe - Hat eine Änderung vorgenommen - Ihre Frage wurde zunächst falsch gelesen. – tymeJV

+0

Ja! Ich danke dir sehr! Das ist ein großartiges Modell, von dem ich endlich die passende Logik verstehen kann. Sehr geschätzt. – Phoebe

Verwandte Themen