2017-06-02 2 views
0

Ich habe eine JSON-Ausgabe von PHP-Datei wie folgt;JSON-Array zu verschiedenen Variablen je nach Gruppen zu vereinfachen

[{"device_id":"9700001","sensor_value":"31.5","update_time":"2017-04-28 18:49:06"}, 
{"device_id":"9700002","sensor_value":"31.5","update_time":"2017-04-28 18:47:05"}, 
{"device_id":"9700003","sensor_value":"31.5","update_time":"2017-04-28 18:45:05"}, 
{"device_id":"9700003","sensor_value":"33.1","update_time":"2017-04-28 06:24:57"}, 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:22:57"}, 
{"device_id":"9700003","sensor_value":"33.1","update_time":"2017-04-28 06:20:56"}, 
{"device_id":"9700001","sensor_value":"33.1","update_time":"2017-04-28 06:18:56"}, 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:16:56"}, 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:14:56"}] 

Ich möchte dieses Array zu bestimmten Datensatzes, dh I-Werte von Gerät konvertieren möchten 9.700.001 von update_time zu erhalten und dem Sensorwert auf zwei Datensätze, für 9.700.001,

datasensor1=[{"sensor_value":"31.5","update_time":"2017-04-28 18:49:06"},{"sensor_value":"33.1","update_time":"2017-04-28 06:18:56"},{"sensor_value":"33.1","update_time":"2017-04-28 06:18:56"}] 

für Geräte 9.700.002,

datasensor2=[{"sensor_value":"31.5","update_time":"2017-04-28 18:47:05"},{"sensor_value":"33.1","update_time":"2017-04-28 06:22:57"},{"sensor_value":"33.1","update_time":"2017-04-28 06:16:56"},{"sensor_value":"33.1","update_time":"2017-04-28 06:14:56"}] 

in ähnlicher Weise für die Geräte 9.700.003,

ich müde erste Gruppe von device_id mit

var sensor= _.groupBy(data,"device_id"); 

aber ich bin nicht in der Lage danach das Objekt zu trennen. Wie soll ich dieses Problem lösen?

Antwort

0

Verwenden filter() und map():

var data = [{"device_id":"9700001","sensor_value":"31.5","update_time":"2017-04-28 18:49:06"}, 
 
{"device_id":"9700002","sensor_value":"31.5","update_time":"2017-04-28 18:47:05"}, 
 
{"device_id":"9700003","sensor_value":"31.5","update_time":"2017-04-28 18:45:05"}, 
 
{"device_id":"9700003","sensor_value":"33.1","update_time":"2017-04-28 06:24:57"}, 
 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:22:57"}, 
 
{"device_id":"9700003","sensor_value":"33.1","update_time":"2017-04-28 06:20:56"}, 
 
{"device_id":"9700001","sensor_value":"33.1","update_time":"2017-04-28 06:18:56"}, 
 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:16:56"}, 
 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:14:56"}]; 
 

 
var sorted = {}; 
 
data.forEach((row) => { 
 
\t sorted[row.device_id] = []; 
 
}); 
 
Object.keys(sorted).forEach((id) => { 
 
    sorted[id] = data.filter((row) => row.device_id === id).map((row) => ({ 
 
    sensor_value: row.sensor_value, 
 
    update_time: row.update_time 
 
    })); 
 
}); 
 

 
console.log(sorted);

+0

Danke für Ihre rasche Antwort. –

+0

änderte Code zur dynamischen Objekterstellung –

0

versuchen mit Array#reduce Methode

var data =[{"device_id":"9700001","sensor_value":"31.5","update_time":"2017-04-28 18:49:06"}, 
 
{"device_id":"9700002","sensor_value":"31.5","update_time":"2017-04-28 18:47:05"}, 
 
{"device_id":"9700003","sensor_value":"31.5","update_time":"2017-04-28 18:45:05"}, 
 
{"device_id":"9700003","sensor_value":"33.1","update_time":"2017-04-28 06:24:57"}, 
 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:22:57"}, 
 
{"device_id":"9700003","sensor_value":"33.1","update_time":"2017-04-28 06:20:56"}, 
 
{"device_id":"9700001","sensor_value":"33.1","update_time":"2017-04-28 06:18:56"}, 
 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:16:56"}, 
 
{"device_id":"9700002","sensor_value":"33.1","update_time":"2017-04-28 06:14:56"}] 
 

 
function group(data , id){ 
 
return data.reduce((a,b)=>{ 
 
if(b.device_id == id) 
 
a.push({ 
 
sensor_value:b.sensor_value, 
 
update_time:b.update_time 
 
}) 
 
return a 
 
},[]) 
 
} 
 
console.log(group(data,9700001)) 
 
console.log(group(data,9700002))

+0

Danke für prompte Antwort. Wie mache ich das dynamisch? Ich meine, abhängig von der Anzahl der Geräte-IDs sollte ich Datensätze erstellen können. –

Verwandte Themen