#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть массив из n числа объектов, каждый из которых в данном случае имеет массив («потребности»). То, что я хочу сделать, это выполнить итерацию по массиву и получить сумму индекса каждого массива.
const testData =
[{
location: 'FL',
needs:[{date: '2021-01-01', count: 5},{date: '2021-01-02', count: 1},{date: '2021-01-03', count: 2},{date: '2021-01-04', count: 23},{date: '2021-01-05', count: 65}]
},{
location: 'AL',
needs:[{date: '2021-01-01', count: 1},{date: '2021-01-02', count: 2},{date: '2021-01-03', count: 3},{date: '2021-01-04', count: 4},{date: '2021-01-05', count: 5}]
}]
Итак, в этом случае у меня остался бы массив, который выглядит как [6, 3, 5, 27, 70]
since testData[0].needs[0] testData[1].needs[0] === 6
amp; testData[0].needs[1] testData[1].needs[1] === 3
и т.д.
Функция, которую я придумал
testData.map((val, index) => {
val.needs.map((needs, index) => {
dayArray.push(needs.count)
})
})
к сожалению, делает testData[0].needs[0] testData[0].needs[1]
более или менее противоположное тому, что мне нужно. Как мне настроить эту функцию, чтобы получить ожидаемые результаты?
Ответ №1:
вы можете использовать картограф для отслеживания суммы дат следующим образом
const testData = [{
location: 'FL',
needs: [{
date: '2021-01-01',
count: 5
}, {
date: '2021-01-02',
count: 1
}, {
date: '2021-01-03',
count: 2
}, {
date: '2021-01-04',
count: 23
}, {
date: '2021-01-05',
count: 65
}]
}, {
location: 'AL',
needs: [{
date: '2021-01-01',
count: 1
}, {
date: '2021-01-02',
count: 2
}, {
date: '2021-01-03',
count: 3
}, {
date: '2021-01-04',
count: 4
}, {
date: '2021-01-05',
count: 5
}]
}]
const mapper = testData.reduce((acc, cur) => {
cur.needs.forEach(item => {
acc[item.date] = (acc[item.date] || 0) item.count;
});
return acc;
}, {});
const dates = Object.keys(mapper);
dates.sort();
console.log(dates.map(k => mapper[k]));