2016-11-30 4 views
0

Dies ist mein Datum-Set:was ist der beste Weg, um die Werte in diesem Datensatz von Zeichenfolge zu konvertieren int

data_p = [ 
[ {"key":"Device_Model","value":"test_model"}, 
    {"key":">20MB/30","value":"11"}, 
    {"key":">200MB/30","value":"33"}, 
    {"key":">2048MB/30","value":"10"}, 
    {"key":">5120MB/30","value":"55"}, 
    {"key":">10240MB/30","value":"10"} 
], 
[{"key":"Device_Model","value":"0P6B670"}, 
{"key":">20MB/30","value":"9"}, 
{"key":">200MB/30","value":"8"}, 
{"key":">2048MB/30","value":"2"}, 
{"key":">5120MB/30","value":"23"}, 
{"key":">10240MB/30","value":"23"}], 
[{"key":"Device_Model","value":"0P6B680"}, 
{"key":">20MB/30","value":"1"}, 
{"key":">200MB/30","value":"23"}, 
{"key":">2048MB/30","value":"23"}, 
{"key":">5120MB/30","value":"23"}, 
{"key":">10240MB/30","value":"23"}], 
[{"key":"Device_Model","value":"0P6B810"}, 
{"key":">20MB/30","value":"5"}, 
{"key":">200MB/30","value":"4"}, 
{"key":">2048MB/30","value":"1"}, 
{"key":">5120MB/30","value":"1"}, 
{"key":">10240MB/30","value":"1"}], 
[ {"key":"Device_Model","value":"0P6B900"}, 
{"key":">20MB/30","value":"4"}, 
{"key":">200MB/30","value":"4"}, 
{"key":">2048MB/30","value":"1"}, 
{"key":">5120MB/30","value":"23"}, 
{"key":">10240MB/30","value":"23"}]] 

Dies ist die Art, wie ich getan habe, aber ich frage mich, ist zu reduzieren, Karte oder Filter ein besserer Weg, es zu tun. Ich meine, sollte ich eine For-Schleife innerhalb einer ForEach-Funktion verwenden? Ich mag auch nicht die i < 6, da dies sehr statisch ist, wenn es mehr als 6 im Datensatz gab?

data_p.forEach(function(d){for(i=1; i<6; i++){console.log(d[i].value); d[i].value=+d[i].value}}) 

Das wird mir geben:

data_p = [ 
    [ {"key":"Device_Model","value":"test_model"}, 
     {"key":">20MB/30","value":11}, 
     {"key":">200MB/30","value":33}, 
     {"key":">2048MB/30","value":10}, 
     {"key":">5120MB/30","value":55}, 
     {"key":">10240MB/30","value":10} 
    ], 
... 

Die Frage ist also gibt es einen besseren Weg, dies zu erreichen?

Antwort

2

Iterieren Sie alle Elemente. Überprüfen Sie, ob Wert numerisch ist (isNaN), dann die Eigenschaft aktualisieren

var data_p = [ 
 
[ {"key":"Device_Model","value":"test_model"}, 
 
    {"key":">20MB/30","value":"11"}, 
 
    {"key":">200MB/30","value":"33"}, 
 
    {"key":">2048MB/30","value":"10"}, 
 
    {"key":">5120MB/30","value":"55"}, 
 
    {"key":">10240MB/30","value":"10"} 
 
], 
 
[{"key":"Device_Model","value":"0P6B670"}, 
 
{"key":">20MB/30","value":"9"}, 
 
{"key":">200MB/30","value":"8"}, 
 
{"key":">2048MB/30","value":"2"}, 
 
{"key":">5120MB/30","value":"23"}, 
 
{"key":">10240MB/30","value":"23"}], 
 
[{"key":"Device_Model","value":"0P6B680"}, 
 
{"key":">20MB/30","value":"1"}, 
 
{"key":">200MB/30","value":"23"}, 
 
{"key":">2048MB/30","value":"23"}, 
 
{"key":">5120MB/30","value":"23"}, 
 
{"key":">10240MB/30","value":"23"}], 
 
[{"key":"Device_Model","value":"0P6B810"}, 
 
{"key":">20MB/30","value":"5"}, 
 
{"key":">200MB/30","value":"4"}, 
 
{"key":">2048MB/30","value":"1"}, 
 
{"key":">5120MB/30","value":"1"}, 
 
{"key":">10240MB/30","value":"1"}], 
 
[ {"key":"Device_Model","value":"0P6B900"}, 
 
{"key":">20MB/30","value":"4"}, 
 
{"key":">200MB/30","value":"4"}, 
 
{"key":">2048MB/30","value":"1"}, 
 
{"key":">5120MB/30","value":"23"}, 
 
{"key":">10240MB/30","value":"23"}]] 
 

 

 

 
data_p.forEach(list => 
 
     list.forEach(pair => 
 
      !isNaN(pair.value) && (pair.value = Number(pair.value)) 
 
     ) 
 
); 
 

 
console.log(data_p);

+0

tks, können Sie nur kurz erklären, was es tut? Was ist Paar, => und Liste? tks – HattrickNZ

+0

Nun, ich gab nur Parameternamen, um es lesbar zu machen. Ihre Stammdatenstruktur enthält ein Array von Objekten. Sie sind eine Art Datenlisten, also habe ich sie alle als "Liste" bezeichnet. Und der Listeninhalt enthält Schlüssel- und Werteigenschaften. Theoretisch sind sie eine Art Schlüsselwertpaare. Also habe ich jeden von ihnen als "Paar" bezeichnet. –

0

Das gibt viele Möglichkeiten, dies zu tun.

E.G. Aktualisieren data_p anstelle mit array.forEach und array.reduce

data_p.forEach(function(a) { 
    a.reduce(function(ignore, obj) { 
     obj.value = Number(obj.value); 
    }); 
}); 

Dies modifiziert Anwendungen reduzieren, um alle Array-Elemente iterieren mit Ausnahme der ersten. Es kann erweitert werden, um zu prüfen, ob der in eine Zahl umgewandelte Wert eine Zahl ist:

data_p.forEach(function(a) { 
    a.reduce(function(ignore, obj) { 
     var temp = Number(obj.value); 
     if(!isNaN(temp) { 
       obj.value = temp; 
     } 
    }); 
}); 

E.G. array.map mit einer neuen Anordnung und Inhalt Arrays

var newArray = data_p.map(a => a.map((o,i)=>(
    { key: o.key, 
     value: o.key=="Device_Model" ? o.value : +o.value} 
))); 

Im Gegensatz zu dem ersten Beispiel zu schaffen, dieses Verfahren nicht data_p (oder Objekte darin) wird mutieren und nimmt data_p gültige Einträge enthält.

0

Statt i < 6, warum nicht d.Length?

Ich bin mir jedoch nicht sicher, was erreicht wird oder warum. Das Endergebnis scheint zu sein, dass mit Ihrem Code Werte von Strings in Zahlen umgewandelt werden, aber es ist nicht offensichtlich warum.

Verwandte Themen