nickola105
@nickola105
начинающий

Как получить нужный объект с другого?

Ребятушки, всем привет. Подскажите
как с того массива объектов
{ {
         "name": "userPollinationBetweenTwoVenues",
         "value": {
           "fromVenueId": {
             "name": "fromVenueId",
             "value": "vq-0000000001"
           },
           "toVenueId": {
             "name": "toVenueId",
             "value": "vq-0000000104"
           },
           "totalUsers": {
             "name": "totalUsers",
             "value": 42
           }
         }
       },
       {
         "name": "userPollinationBetweenTwoVenues",
         "value": {
           "fromVenueId": {
             "name": "fromVenueId",
             "value": "vq-0000000001"
           },
           "toVenueId": {
             "name": "toVenueId",
             "value": "vq-0000000105"
           },
           "totalUsers": {
             "name": "totalUsers",
             "value": 27
           }
         }
       },
       {
         "name": "userPollinationBetweenTwoVenues",
         "value": {
           "fromVenueId": {
             "name": "fromVenueId",
             "value": "vq-0000000002"
           },
           "toVenueId": {
             "name": "toVenueId",
             "value": "vq-0000000201"
           },
           "totalUsers": {
             "name": "totalUsers",
             "value": 718
           }
         }
       },
       {
         "name": "userPollinationBetweenTwoVenues",
         "value": {
           "fromVenueId": {
             "name": "fromVenueId",
             "value": "vq-0000000002"
           },
           "toVenueId": {
             "name": "toVenueId",
             "value": "vq-0000000202"
           },
           "totalUsers": {
             "name": "totalUsers",
             "value": 254
           }
         }
       },
 {
         "name": "userPollinationBetweenTwoVenues",
         "value": {
           "fromVenueId": {
             "name": "fromVenueId",
             "value": "vq-0000000003"
           },
           "toVenueId": {
             "name": "toVenueId",
             "value": "vq-0000000301"
           },
           "totalUsers": {
             "name": "totalUsers",
             "value": 258
           }
         }
       }]

получить объект типа
0: {
fromVenueId: vq-0000000001,
totalUser: 5453 (общее количество юзеров с одинаковым fromVenueId)
},
1: {
fromVenueId: vq-0000000002,
totalUser: 53 (общее количество юзеров с одинаковым fromVenueId)
}
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
@abberati
frontend-разработчик
Я бы посоветовал прислушаться к совету Евгений Калибров, но если совсем невтерпёж на клиенте это проворачивать, то вот:

data.map(obj => ({
      fromVenueId: obj.value.fromVenueId.value,
      totalUsers: obj.value.totalUsers.value,
    }))
    .reduce((acc, item) => {
      const obj = acc.find(o => o.fromVenueId === item.fromVenueId)
      if (obj) {
        obj.totalUsers += item.totalUsers
        return acc
      } else {
        return [...acc, item]
      }
    }, [])
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Object.values(arr.reduce((acc, n) => {
  const k = n.value.fromVenueId.value;
  const v = n.value.totalUsers.value;

  (acc[k] = acc[k] || { fromVenueId: k, totalUsers: 0 }).totalUsers += v;

  return acc;
}, {}))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
rework
@rework
Помог ответ? В благодарность отметь его решением
Не совсем логично делать это на стороне JS, так как вам потребуется несколько проходов циклом, что бы объединить данные по fromVenueId и посчитать totalUser. При больших объемах данных - это будет довольно затратно по памяти и времени. Подумайте над возможностью сделать нужные вам операции на уровне запроса к базе данных, вы же из базы эти данные получаете?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы