Javascript получить сумму индексов n числа массивов целых чисел

#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]));