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] }
4 Réponses :
Essayez de changer à ceci: p> var output = callBack(element);
if (myObj[output] == undefined)
myObj[output] = [element];
else
myObj[output].push(element);
Cela marche. Votre explication est parfaite, merci!
Voulait probablement stocker la valeur de rappel (élément) code> dans une variable. Pas besoin d'exécuter la fonction de rappel deux fois pour chaque valeur de matrice.
Vous pouvez utiliser la méthode pour transversir l'objet et la matrice ou essayer un tableau d'affût p>
Vous pouvez tout capturer dans un simple p> Réduire () Code> Fonctionnement: 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));
Pour la contribution de Robby supplémentaire - vous pouvez transmettre la fonction de plancher directement dans la liste des groupes XXX PRE> P>
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.