2 votes

Comment grouper par attribut et compter une énorme liste d'éléments ?

J'ai une liste de cultures avec leurs attributs tels que le lieu où elles ont été plantées, la technique de plantation utilisée, l'expérience et la culture elle-même. J'ai réussi à les regrouper par culture et par coordonnées (qui représentent l'emplacement), mais ils sont regroupés séparément. Voici mon code qui les regroupe et les compte.

// Initialize Firebase
firebase.initializeApp(firebaseConfig);

// Reference messages collection
// var messagesRef = firebase.database().ref('Planting-Calendar-Entries');

database = firebase.database()

var ref = database.ref('Planting-Calendar-Entries');
ref.on('value', gotData, errData);

function gotData(data){
  console.log(data.val())
    var veggie = data.val();
    const counts = Object.values(veggie).reduce((counts, { Veg_planted, coordinates }) => ({
        ...counts,
        [Veg_planted]: (counts[Veg_planted] || 0) + 1,
        [coordinates]: (counts[coordinates] || 0) + 1
      }), {});
      console.log(counts);
  }
function errData(err){
    console.log('Error!');
    console.log(err)
}

Voici le résultat du code ci-dessus :

"-35.2294059, 173.9472028": 1
"-6.2087634, 106.845599": 3  
"-1.2920659, 36.8219462": 1 
"-0.3688967, 35.286286": 10  
"-0.3206518, 35.21896820000001": 1 
"-0.1634664, 35.5931397": 1  
"-0.3452364, 35.1519724": 2 
Ageratum: 3 
"Balloon Flower": 2
Beetroot: 1
"Bells Of Ireland": 2
Broccoli: 1
Cabbage: 12

J'aimerais qu'ils soient regroupés et comptés comme ci-dessous :

"-0.3688967, 35.286286", Cabbage: 8
"-1.2920659, 36.8219462", Cabbage: 2
"-0.3206518, 35.21896820000001", Broccoli: 1
"-0.3688967, 35.286286", Beetroot: 1
"-0.3452364, 35.1519724", Ageratum: 2

Si vous avez une idée de ce que je peux faire, je vous en serai reconnaissant. Merci !

1voto

Nina Scholz Points 17120

On dirait que tu dois ajouter Veg_planted à une clé combinée avec des coordonnées.

Avant la fonction de rappel :

 var space = ', '

Rappel pour la réduction :

(counts, { Veg_planted, coordinates }) => {
    const key = [...coordinates, space, Veg_planted].join('');
    counts[key] = (counts[key] ||0) + 1;
    return counts;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X