Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment découper un objet tableau d'une longueur de 365 en 12 groupes par mois?

L'image présentée est un fichier json qui stocke les données AQI pour toute l'année 2014. Je souhaite maintenant calculer l'AQI moyen mensuel. Comment dois-je traiter ce tableau ?

怪我咯怪我咯2663 Il y a quelques jours1002

répondre à tous(7)je répondrai

  • 黄舟

    黄舟2017-07-05 10:38:42

    arr.reduce((r,v)=>r[v.date.split('/')[1]-1].push(v)&&r,new Array(12).fill(0).map(_=>[]))

    Ce résultat de retour peut renvoyer un nouveau tableau contenant 12 tableaux, chaque sous-tableau contient les données AQI du mois en cours

    Je viens de découvrir que le but principal de l'affiche est de trouver l'IQA moyen chaque mois, vous pouvez donc faire ceci :

    arr.reduce((r,v)=>r[v.date.split('/')[1]-1].push(v)&&r,new Array(12).fill(0).map(_=>[]))
       .map((i,k)=>{
            let r = i.reduce((r,v)=>{for(let j in r)r[j]+=(+v[j]);return r},{beijing:0,shanghai:0,guangzhou:0});
            for(let j in r) r[j] = parseInt(r[j]/i.length);
            return {...r,month:k+1+'月'}
    })    

    Ce résultat renvoie un tableau contenant 12 éléments en forme de {month:'1月',beijing:12,shanghai:24,guangzhou:36}, et la valeur à l'intérieur est la valeur moyenne de chaque mois.

    répondre
    0
  • 欧阳克

    欧阳克2017-07-05 10:38:42

    Regroupez par en arrière-plan, utilisez avg()

    répondre
    0
  • 三叔

    三叔2017-07-05 10:38:42

    Vous avez l'impression que vous n'avez pas besoin de traiter les données, ce qui ne fera que continuer à consommer de la mémoire. Il vous suffit de connaître le point de départ et le point de fin de chaque mois, et d'utiliser simplement le point de départ et le point de fin pour obtenir le tableau. pour le calcul.
    Parce qu'en fait, les données Tout est là, c'est juste que les règles d'utilisation des données sont différentes

    répondre
    0
  • PHP中文网

    PHP中文网2017-07-05 10:38:42

    Votre question porte principalement sur la façon de diviser en 12 groupes. Je vous propose deux idées simples

    .
    1. Convertir la date en objet date et regrouper par mois

    2. Utilisez des règles régulières pour obtenir des dates correspondantes et les regrouper

    répondre
    0
  • 迷茫

    迷茫2017-07-05 10:38:42

    D'après l'analyse du JSONformat que vous avez donné :

    • Tableau périphérique 1-12, représentant 12 mois

    • Parcourez à nouveau le tableau et obtenez object,取objectdata值,按照/分割得到月,根据月份把objectrempli dans le mois correspondant

    • Obtenez les données correspondantes pour chaque mois et traitez-les sur une base mensuelle

    répondre
    0
  • 滿天的星座

    滿天的星座2017-07-05 10:38:42

    Laissez le back-end traiter le regroupement des données, et le front-end est responsable de son utilisation.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-07-05 10:38:42

    var jsonData = [{
        'date': '2014/1/1',
        'beijing': 80,
        'shanghai': 123,
        'guangzhou': 99 
    },{
        'date': '2014/1/2',
        'beijing': 80,
        'shanghai': 123,
        'guangzhou': 99 
    },{
        'date': '2014/2/1',
        'beijing': 80,
        'shanghai': 123,
        'guangzhou': 99 
    }];// 保存的json数据
    
    var arr = [{'date': '1', 'b': 0, 's': 0, 'g': 0}];
    var k = 0;
    for(var i = 0; i < jsonData.length; i++) {
        var item = jsonData[i];
        var dateArr = item.date.split('/');
        if (dateArr[1] == arr[k].date) {
            arr[k].b += item.beijing;
            arr[k].s += item.shanghai;
            arr[k].g += item.guangzhou;
        } else {
            var param = {
                'date': dateArr[1],
                'b': 0,
                's': 0,
                'g': 0
            };
            k++;
            arr.push(param);
        }
    }
    console.log(arr);

    Le code ci-dessus résume les données de chaque mois. Il devrait être simple de faire la moyenne. Cependant, le code ci-dessus a une exigence pour les données json, c'est-à-dire que toutes les données doivent être classées en fonction du mois.

    répondre
    0
  • Annulerrépondre