0
votes

Utilisation de JavaScript est là un moyen d'appuyer sur des informations dans un tableau qui est séparément d'une paire de clé / de valeur?

J'ai des problèmes avec cet algorithme et j'adorerais le soutien de tous!

Essentiellement, mes problèmes sont en ligne 7.
Ici, je réussis à créer une clé pour chaque élément tout en attribuant une valeur correspondant à la clé actuelle que nous travaillons.
Mais si vous remarquez ma sortie, au lieu d'obtenir {1: [1.3], 2: [2.1, 2.4]} code>
Sortie de messagerie im {1: [1.3], 2: [2.4]} code>. P>

function groupBy (array, callBack) {
    const myObj = {};
    let numsA = [];
    // iterate over array
    array.forEach(element => {
        //each element perform callBack
        myObj[callBack(element)] = [element];
        // console.log(myObj)
    })
    // return an object
    return myObj
};

const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };

console.log(groupBy(decimals, floored)); 

// log: { 1: [1.3], 2: 2.4] }
// should log: { 1: [1.3], 2: [2.1, 2.4] } 


1 commentaires

Si vous souhaitez modifier la matrice actuelle détenue à partir de l'itération précédente, vous devez rechercher son existence, puis la muter si elle est trouvée.


4 Réponses :


3
votes

Essayez de changer xxx pré>

à ceci: p>

var output = callBack(element);
if (myObj[output] == undefined)
    myObj[output] = [element];
else
    myObj[output].push(element);


2 commentaires

Cela marche. Votre explication est parfaite, merci!


Voulait probablement stocker la valeur de rappel (élément) dans une variable. Pas besoin d'exécuter la fonction de rappel deux fois pour chaque valeur de matrice.



0
votes

Vous pouvez utiliser la méthode pour transversir l'objet et la matrice ou essayer un tableau d'affût


0 commentaires

0
votes

Vous pouvez tout capturer dans un simple Réduire () Code> Fonctionnement:

p>

const groupBy = (array, callback) => {
  return array.reduce((a, v) => {
    const key = callback(v);
    a[key] = [...(a[key] || []), v];
    return a;
  }, {});
};

const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };

console.log(groupBy(decimals, floored)); 


0 commentaires

0
votes

Pour la contribution de Robby supplémentaire - vous pouvez transmettre la fonction de plancher directement dans la liste des groupes XXX


0 commentaires