У меня есть следующий пример массива объектов, каждый объект в массиве содержит id
, personId
, scores
и, наконец, score
. В некоторых объектах scores
является либо null
, либо содержит другой массив объектов, которые являются баллами. В других объектах score
может содержать значение вместо null
. Наконец, может быть случай, когда объект может содержать как scores
, так и score
.
const startingArray = [
{
id: 1,
personId: 1,
scores: [
{
id: 1,
title: 'Google',
score: 12
},
{
id: 2,
title: 'Bing',
score: 23
},
{
id: 3,
title: 'Facebook',
score: 34
}
],
score: null
},
{
id: 2,
personId: 1,
scores: null,
score: 123
},
{
id: 3,
personId: 2,
scores: [
{
id: 4,
title: 'Google',
score: 7
},
{
id: 5,
title: 'Bing',
score: 32
},
{
id: 6,
title: 'Facebook',
score: 9
}
],
score: null
},
{
id: 4,
personId: 3,
scores: null,
score: 106
},
{
id: 5,
personId: 3,
scores: [
{
id: 7,
title: 'Google',
score: 6
},
{
id: 8,
title: 'Bing',
score: 4
},
{
id: 9,
title: 'Facebook',
score: 3
}
],
score: 5
}
]
Я могу отфильтровать startingArray
, чтобы вернуть действительные объекты для человека:
startingArray.filter(item => item.personId === personId)
И я также выяснил, как использовать map
и reduce
, чтобы вернуть значение score
предметов для человека:
startingArray.filter(item => item.personId === personId).map(item => item.score).reduce((a, b) => a + b, 0)
Я борюсь за то, чтобы иметь возможность суммировать score
элементов в массиве scores
, где он настроен против человека.
В конечном итоге я должен позвонить personScores(1)
и получить общее количество баллов за человека 1 (т.е. 69), или позвонить personScores(3)
и получить 124 (то есть 106 + 13 +). 5).