Вы можете получить значения из вашего data
объекта, который даст вам массив ваших значений:
[[{ "date": "2020-1-22", "confirmed": 5, "deaths": 0, "recovered": 0 }, { "date": "2020-1-23", "confirmed": 7, "deaths": 0, "recovered": 0 } ], ... ]
Затем вы можете использовать .reduce()
в этом массиве для накопления в новом Map
экземпляр, где каждый ключ является датой, а каждое значение, сохраненное датой, является суммой общего количества / суммы. Чтобы получить эти значения, вам нужно провести l oop через каждый объект в массиве значений объекта и выполнить преобразование, чтобы получить дату и количество подтвержденных случаев для этого конкретного объекта (здесь я делаю это с помощью деструктурирования {date, [key]: amt}
). Затем вы можете установить значение даты для карты как ранее сохраненное значение (если присутствует, если не используется 0), добавленное к текущей сумме. Затем вы можете получить .values()
с карты и использовать Array.from()
для преобразования итерируемого в массив:
const data = { "Afghanistan": [{ "date": "2020-1-22", "confirmed": 5, "deaths": 0, "recovered": 0 }, { "date": "2020-1-23", "confirmed": 7, "deaths": 0, "recovered": 0 } ], "Albania": [{ "date": "2020-1-22", "confirmed": 3, "deaths": 0, "recovered": 0 }, { "date": "2020-1-23", "confirmed": 10, "deaths": 0, "recovered": 0 } ] };
const sumByKey = (key, data) =>
Array.from(Object.values(data).reduce((map, objs) =>
objs.reduce((m, {date, [key]: amt}) => m.set(date, (m.get(date) || 0) + amt), map), new Map).values()
);
console.log(sumByKey('confirmed', data));