J'ai les données suivantes: Je veux le regrouper en fonction du parent.id code> et calculez le score moyen, afin que je puisse avoir ce qui suit. Résultat: P>
let group = cars.reduce((r, a) => {
console.log("a", a);
console.log('r', r);
r[a.make] = [...r[a.parent.id] || [], a];
return r;
}, {});
console.log("group", group);
3 Réponses :
Créer un objet / HASHMAP, puis formater l'objet résultant dans un tableau. sortie: p>
Remarque, j'ai mis le score à l'intérieur de chaque article comme mentionné dans les commentaires de votre question.
À partir des données que vous avez fournies Si vous avez besoin de compter la moyenne de la propriété CODE> SCORE CODE>, utilisez la méthode suivante: elle ira déterrera vos données, regroupez-la et calculez la valeur totale du score et comptez des valeurs de score. Et après réduction des groupes Objet effectuer une carte qui calculera la moyenne pour le score pour tous les groupes à l'aide de tous les groupes à l'aide de p> totauxcore code> et
scorecount code>
const data = [
{
parent: {
id: "1",
name: "Europe"
},
item: {
name: "Italy"
},
score: 5
},
{
parent: {
id: "1",
name: "Europe"
},
item: {
name: "France"
},
score: 4.5
},
{
parent: {
id: "1",
name: "Europe"
},
item: {
name: "UK"
},
score: 4.9
},
{
parent: {
id: "2",
name: "Afrique"
},
item: {
name: "Morocco"
},
score: 3.1
},
{
parent: {
id: "2",
name: "Afrique"
},
item: {
name: "Egypt"
},
score: 3.9
}
];
let group = data.reduce((acc, rec) => {
if (acc.find(item => item.parent.id === rec.parent.id))
{
const idx = acc.findIndex(item => item.parent.id === rec.parent.id)
acc[idx].parent.items = acc[idx].parent.items.concat(rec.item)
acc[idx].parent.score += rec.score
acc[idx].parent.scoreCount +=1
} else {
acc = acc.concat({parent: {...rec.parent, score: rec.score, items: [rec.item], scoreCount:1}})
}
return acc
}, []).map(it => ({parent: {id: it.parent.id, name:it.parent.name, score: (it.parent.score / it.parent.scoreCount), items: it.parent.items}}));
console.log("group", group);
Vous pouvez utiliser P> _reduce () code> fonction: https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_Objects/array/reduce
const data = [
{
parent: {
id: "1",
name: "Europe"
},
item: {
name: "Italy"
},
score: 5
},
{
parent: {
id: "1",
name: "Europe"
},
item: {
name: "France"
},
score: 4.5
},
{
parent: {
id: "1",
name: "Europe"
},
item: {
name: "UK"
},
score: 4.9
},
{
parent: {
id: "2",
name: "Afrique"
},
item: {
name: "Morocco"
},
score: 3.1
},
{
parent: {
id: "2",
name: "Afrique"
},
item: {
name: "Egypt"
},
score: 3.9
}
];
var result = data.reduce((res, data) => {
if(!res[data.parent.id]) {
data.item = [data.item];
res[data.parent.id] = data;
} else {
res[data.parent.id]['item'].push(data['item']);
res[data.parent.id]['score'] = (res[data.parent.id]['score'] + data['score'])/2;
}
return res;
}, [])
.filter(x => x != null)
console.log(result)
Qu'est-ce que
a.make code>? Il n'y a pas de propriété code> code> dans vos objets.
Il devrait être
a.parent.id code>.
Le tableau résultant ne devrait-il pas avoir les scores à l'intérieur de chaque article et non comme un attribut du parent?
@GandPhuba Yea, en fait, c'est mieux, je vais mettre à jour la question. MERCI