Заполните отсутствующие объекты в массиве объектов на основе свойства объекта во втором массиве. - PullRequest
0 голосов
/ 29 марта 2020

Приведенный ниже код добавляет элемент объекта с доходом = 0 для одной из трех категорий (класс, мастерская, обучение), если они отсутствуют в этом месяце (поэтому необходимо оценить комбинацию категории и месяц свойства каждого элемента)

const rawdata = [
  { category: 'Class', month: '2018-12-01T00:00:00.000Z', revenue: 100 },
  { category: 'Workshop', month: '2018-12-01T00:00:00.000Z', revenue: 140 },
  { category: 'Training', month: '2018-12-01T00:00:00.000Z', revenue: 300 },
  { category: 'Class', month: '2019-01-01T00:00:00.000Z', revenue: 200 },
  { category: 'Workshop', month: '2019-01-01T00:00:00.000Z', revenue: 200 },
  { category: 'Class', month: '2019-02-01T00:00:00.000Z', revenue: 134 },
  { category: 'Workshop', month: '2019-02-01T00:00:00.000Z', revenue: 124 },
  ...
];
const categories = Array.from(new Set(rawdata.map(x => x.category)));
const months = Array.from(new Set(rawdata.map(x => x.month)));
for(const month of months) {
  for(const category of categories) {
    const found = rawdata.find(element => element.month == month && element.category == category);
    if(!found) rawdata.push({ month, category, revenue: 0 });
  }
}

Это меняет массив выше на (обратите внимание на элементы с доходом: 0):

[
  { category: 'Class', month: '2018-12-01T00:00:00.000Z', revenue: 100 },
  { category: 'Workshop', month: '2018-12-01T00:00:00.000Z', revenue: 140 },
  { category: 'Training', month: '2018-12-01T00:00:00.000Z', revenue: 300 },
  { category: 'Class', month: '2019-01-01T00:00:00.000Z', revenue: 200 },
  { category: 'Workshop', month: '2019-01-01T00:00:00.000Z', revenue: 200 },
  // Next object element was added
  { category: 'Training', month: '2019-01-01T00:00:00.000Z', revenue: 0 }
  { category: 'Class', month: '2019-02-01T00:00:00.000Z', revenue: 134 },
  { category: 'Workshop', month: '2019-02-01T00:00:00.000Z', revenue: 124 },
  // Next object element was added
  { category: 'Training', month: '2019-02-01T00:00:00.000Z', revenue: 0 }
  ...
];

Есть ли более элегантный подходить? То, что я делаю, работает, но не кажется эффективным.

1 Ответ

0 голосов
/ 29 марта 2020

попробуйте это:

myArray.forEach(element=>{
    if(!element.revenue){
        element.revenue = 0
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...