@gauthier

Как посчитать среднее значение данных в массиве?

Здравствуйте!
Уже писал с подобным вопросом здесь, но там немного другая структура была, сейчас снова случился затор.
Есть, например, такой массив:
const array = [
    {
        "properties": {
            "name": "Название 1",
            "id": 1,
            "groups": [
                    {
                    "id": 0,
                    "name": "Группа 1",
                    'well-being': 0.9,
                    'needs': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.5
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.6
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.9
                     }
                    ],
                    'provision': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.8
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.4
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.2
                     }
                    ]
                },
                {
                    "id": 1,
                    "name": "Группа 2",
                    'well-being': 0.5,
                    'needs': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.4
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.3
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.7
                     }
                    ],
                    'provision': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.2
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.5
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.7
                     }
                    ]
                },
                {
                    "id": 2,
                    "name": "Группа 3",
                    'well-being': 0.4,
                    'needs': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.5
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.2
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.4
                     }
                    ],
                    'provision': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.9
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.5
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.2
                     }
                    ]
                }
            ]
        }
    },
    {
        "properties": {
            "name": "Название 2",
            "id": 2,
            "groups": [
                {
                    "id": 0,
                    "name": "Группа 1",
                    'well-being': 0.8,
                    'needs': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.5
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.3
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.5
                     }
                    ],
                    'provision': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.9
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.2
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.5
                     }
                    ]
                },
                {
                    "id": 1,
                    "name": "Группа 2",
                    'well-being': 0.3,
                    'needs': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.3
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.5
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.6
                     }
                    ],
                    'provision': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.9
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.2
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.2
                     }
                    ]
                },
                {
                    "id": 2,
                    "name": "Группа 3",
                    'well-being': 0.8,
                    'needs': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.4
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.6
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.1
                     }
                    ],
                    'provision': [
                     {
                      "id": 1,
                      "name": "Потребность/ценность 1",
                      "value": 0.6
                     },
                     {
                      "id": 2,
                      "name": "Потребность/ценность 2",
                      "value": 0.9
                     },
                     {
                      "id": 3,
                      "name": "Потребность/ценность 3",
                      "value": 0.3
                     }
                    ]
                }
            ]
        }
    },
    {......},
    {......}
];


Необходимо не только посчитать среднее well-being (c этим я справился), но нужно привести к общему виду, чтоб выглядело примерно так:

[
   {
    id:0,
    name:'Группа 1',
    value: /*среднее значение well-being*/,
    values: [
                   {
                    id:1,
                    name: 'Потребность/ценность 1',
                    needs: /*среднее значение needs*/,
                    provision: /*среднее значение provision*/
                    },
                    {......},
                    {......}
                  ]
  },
  {......},
  {......}
]


Подскажите, как можно это сделать?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const average = arr => arr.reduce((acc, n) => acc + n, 0) / arr.length;
const extractValues = (group, item, key) => item[key].forEach(n => ((group.values[n.id] ||= { id: n.id, name: n.name })[key] ||= []).push(n.value));

const result = Object
  .values(arr
    .flatMap(n => n.properties.groups)
    .reduce((acc, n) => (
      acc[n.id] ||= {
        id: n.id,
        name: n.name,
        wellBeing: [],
        values: {},
      },
      acc[n.id].wellBeing.push(n['well-being']),
      extractValues(acc[n.id], n, 'needs'),
      extractValues(acc[n.id], n, 'provision'),
      acc
    ), {}))
  .map(n => ({
    id: n.id,
    name: n.name,
    value: average(n.wellBeing),
    values: Object.values(n.values).map(m => (
      m.needs = average(m.needs),
      m.provision = average(m.provision),
      m
    ))
  }));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы