2017-10-20 14 views
0

J'ai et deux tableaux qui sont liés les uns aux autres. Array A contient des dates hebdomadaires et Array B a des prix hebdomadaires. Chaque vendredi de nouvelles données sont publiées et poussées dans ces tableaux via l'API, donc certains mois ont 5 éléments (c'est-à-dire Jan) alors que certains mois ont seulement 4 éléments (c'est-à-dire février). Voir l'exemple ci-dessous.Convertir les données hebdomadaires en données mensuelles en utilisant Javascript et/ou jQuery

Array A:

["2003-01-03", "2003-01-10", "2003-01-17", "2003-01-24", "2003-01-31", "2003-02-07", "2003-02-14", "2003-02-21", "2003-02-28", etc..] 

Array B

["5.85", "5.95", "5.97", "5.91", "5.90", "5.88", "5.86", "5.84", "5.79", etc..] 

code:

var ajx = $.getJSON(api, function(data) {     
    for (var i =0; i <= data.count -1; i++){ 
     $("#table").append("<tr> <td>" + data.observations[i].date + "</td> <td>" + data.observations[i].value + "</td> </tr>"); 
     xaxis.push(data.observations[i].date) //Array A - weekly (default state) 
     yaxis.push(data.observations[i].value) //Array B - weekly (default state) 
     } 

Comment pourrais-je être en mesure de convertir en tableaux "mensuels" et "annuels"?

+1

S'il vous plaît inclure des solutions tentées, pourquoi ils ne travaillaient pas, et les résultats attendus. Cela nous aiderait vraiment à comprendre le problème avec votre code. Merci! –

+0

Alors, comment les deux matrices sont-elles mappées? comment le tableau A (mois) correspond-il au tableau des prix? Ne serait-il pas logique de créer un tableau json en utilisant les informations provenant de l'API? –

+0

Le tableau inclut-il des données d'une seule année? –

Répondre

2

Vous pouvez utiliser array#reduce pour regrouper des données en fonction de l'année et à l'intérieur de chaque année, vous pouvez résumer le prix de chaque mois.

const arrayA = ["2003-01-03", "2003-01-10", "2003-01-17", "2003-01-24", "2003-01-31", "2003-02-07", "2003-02-14", "2003-02-21", "2003-02-28"], 
 
     arrayB = ["5.85", "5.95", "5.97", "5.91", "5.90", "5.88", "5.86", "5.84", "5.79"]; 
 

 
let result = arrayA.reduce(function(res, date, index){ 
 
    let [year, month, day] = date.split('-'); 
 
    let price = arrayB[index]; 
 
    if(year in res){ 
 
    if(month in res[year]) { 
 
     res[year][month].price = 
 
      ((res[year][month].price * res[year][month].count) + +price)/(res[year][month].count+1); 
 
     res[year][month].count += 1; 
 
     
 
    } else { 
 
     res[year][month] = {price : +price, count : 1}; 
 
    } 
 
    } else { 
 
    res[year] = {[month]: {price : +price, count :1}}; 
 
    } 
 
    return res; 
 
}, Object.create(null)); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Je pense que vous avez ajouté les valeurs de prix. Devrait être la moyenne mensuelle. – user3062459

+0

J'ai ajouté les prix. Vous voulez un prix moyen pour chaque mois, n'est-ce pas? –

+0

Oui s'il vous plaît ..... – user3062459