2017-05-30 5 views
1

Très bien un débutant ici avec Javascript et dans la programmation en général. J'apprécierais n'importe quelle aide ou conseil que vous pouvez fournir.Javascript ajouter deux champs/clés ensemble

Je travaille sur un projet parallèle pour extraire des données d'une API de repos et l'afficher dans une table html. Voici la fonction

function example(){ 

callApi('URL Here',function(apiObject){ 

    document.getElementById("result").innerHTML = "<pre>"+JSON.stringify(apiObject, null, 4)+"</pre>"; 
    }); 

}; 

function callApi(apiRequest,callback) { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
     var jsonObject = JSON.parse(xhttp.responseText); 
     callback(jsonObject); 
     } 
    }; 
    xhttp.open("GET", apiRequest, true); 
    xhttp.send(); 
} 

Voici ce que la sortie JSON ressemble:

[ 
{ 
    "Start_Time_Stamp_UTC_ms": 1496121339796, 
    "End_Time_Stamp_UTC_ms": 1496122179526, 
    "End_Date": "Tue May 30 2017 15:29:39 GMT+1000 (GMT)", 
    "Start_Date": "Tue May 30 2017 15:15:39 GMT+1000 (GMT)", 
    "Meter": 350000562, 
    "Protocol": "v4", 
    "Count": 15, 
    "rejected_bad": 0, 
    "rejected_duplicates": 0, 
    "kWh_Tot_Max": 2100.57, 
    "Rev_kWh_Tot_Max": 1243.29 
}, 
{ 
    "Start_Time_Stamp_UTC_ms": 1496120439546, 
    "End_Time_Stamp_UTC_ms": 1496121279556, 
    "End_Date": "Tue May 30 2017 15:14:39 GMT+1000 (GMT)", 
    "Start_Date": "Tue May 30 2017 15:00:39 GMT+1000 (GMT)", 
    "Meter": 350000562, 
    "Protocol": "v4", 
    "Count": 15, 
    "rejected_bad": 0, 
    "rejected_duplicates": 0, 
    "kWh_Tot_Max": 2100.35, 
    "Rev_kWh_Tot_Max": 1243.13 
}, 
] 

Ce que je besoin d'aide est de savoir comment faire une boucle à travers la sortie et soustraire la valeur « Rev_kWh_Tot_Max » de la « kWh_Tot_Max "valeur et mettre le résultat dans un nouveau" champ/clé "(pas sûr de la bonne terminologie) dans le tableau.

Voici ce que je veux en venir:

[ 
{ 
    "Start_Time_Stamp_UTC_ms": 1496121339796, 
    "End_Time_Stamp_UTC_ms": 1496122179526, 
    "End_Date": "Tue May 30 2017 15:29:39 GMT+1000 (GMT)", 
    "Start_Date": "Tue May 30 2017 15:15:39 GMT+1000 (GMT)", 
    "Meter": 350000562, 
    "Protocol": "v4", 
    "Count": 15, 
    "rejected_bad": 0, 
    "rejected_duplicates": 0, 
    "kWh_Tot_Max": 2100.57, 
    "Rev_kWh_Tot_Max": 1243.29, 
    "Net_kWh": 857.28 
}, 
{ 
    "Start_Time_Stamp_UTC_ms": 1496120439546, 
    "End_Time_Stamp_UTC_ms": 1496121279556, 
    "End_Date": "Tue May 30 2017 15:14:39 GMT+1000 (GMT)", 
    "Start_Date": "Tue May 30 2017 15:00:39 GMT+1000 (GMT)", 
    "Meter": 350000562, 
    "Protocol": "v4", 
    "Count": 15, 
    "rejected_bad": 0, 
    "rejected_duplicates": 0, 
    "kWh_Tot_Max": 2100.35, 
    "Rev_kWh_Tot_Max": 1243.13, 
    "Net_kWh": 857.22 
}, 
] 

Toute aide serait grandement appréciée!

Répondre

1

Vous pouvez utiliser Array#map

var data = [{ 
 
    "Start_Time_Stamp_UTC_ms": 1496121339796, 
 
    "End_Time_Stamp_UTC_ms": 1496122179526, 
 
    "End_Date": "Tue May 30 2017 15:29:39 GMT+1000 (GMT)", 
 
    "Start_Date": "Tue May 30 2017 15:15:39 GMT+1000 (GMT)", 
 
    "Meter": 350000562, 
 
    "Protocol": "v4", 
 
    "Count": 15, 
 
    "rejected_bad": 0, 
 
    "rejected_duplicates": 0, 
 
    "kWh_Tot_Max": 2100.57, 
 
    "Rev_kWh_Tot_Max": 1243.29 
 
    }, 
 
    { 
 
    "Start_Time_Stamp_UTC_ms": 1496120439546, 
 
    "End_Time_Stamp_UTC_ms": 1496121279556, 
 
    "End_Date": "Tue May 30 2017 15:14:39 GMT+1000 (GMT)", 
 
    "Start_Date": "Tue May 30 2017 15:00:39 GMT+1000 (GMT)", 
 
    "Meter": 350000562, 
 
    "Protocol": "v4", 
 
    "Count": 15, 
 
    "rejected_bad": 0, 
 
    "rejected_duplicates": 0, 
 
    "kWh_Tot_Max": 2100.35, 
 
    "Rev_kWh_Tot_Max": 1243.13 
 
    }, 
 
]; 
 

 
var output = data.map(function(d) { 
 
    d.Net_kwh = d.kWh_Tot_Max - d.Rev_kWh_Tot_Max; 
 
    return d; 
 
}); 
 

 
console.log(output);

Si vous êtes à la recherche pour l'arrondir 2 décimales ainsi, utilisez

d.Net_kwh = Number((d.kWh_Tot_Max - d.Rev_kWh_Tot_Max).toFixed(2)); 

Il utilise toFixed() pour réduire à 2 décimales et Number() pour le reconvertir en nombre.

+0

Ceci est la meilleure réponse jusqu'à présent, la carte est plus idiomatique qu'une boucle for en JavaScript et il est bon d'éviter la mutation lorsque cela est possible. –

+0

Merci les gars! Grande aide! – campbellpng

1

Vous pouvez parcourir la JSON array et ajouter un attribut comme indiqué ci-dessous

var json = [{ 
 
    "Start_Time_Stamp_UTC_ms": 1496121339796, 
 
    "End_Time_Stamp_UTC_ms": 1496122179526, 
 
    "End_Date": "Tue May 30 2017 15:29:39 GMT+1000 (GMT)", 
 
    "Start_Date": "Tue May 30 2017 15:15:39 GMT+1000 (GMT)", 
 
    "Meter": 350000562, 
 
    "Protocol": "v4", 
 
    "Count": 15, 
 
    "rejected_bad": 0, 
 
    "rejected_duplicates": 0, 
 
    "kWh_Tot_Max": 2100.57, 
 
    "Rev_kWh_Tot_Max": 1243.29, 
 
    "Net_kWh": 857.28 
 
    }, 
 
    { 
 
    "Start_Time_Stamp_UTC_ms": 1496120439546, 
 
    "End_Time_Stamp_UTC_ms": 1496121279556, 
 
    "End_Date": "Tue May 30 2017 15:14:39 GMT+1000 (GMT)", 
 
    "Start_Date": "Tue May 30 2017 15:00:39 GMT+1000 (GMT)", 
 
    "Meter": 350000562, 
 
    "Protocol": "v4", 
 
    "Count": 15, 
 
    "rejected_bad": 0, 
 
    "rejected_duplicates": 0, 
 
    "kWh_Tot_Max": 2100.35, 
 
    "Rev_kWh_Tot_Max": 1243.13, 
 
    "Net_kWh": 857.22 
 
    }, 
 
]; 
 

 
for (var i = 0; i < json.length; i++) { 
 
    json[i]["Net_kWh"] = json[i]["kWh_Tot_Max"] - json[i]["Rev_kWh_Tot_Max"]; 
 
} 
 

 
console.log(json)