Цикл данных и динамическое хранение их в объектах - PullRequest
0 голосов
/ 13 апреля 2020

В настоящее время я начинаю с пустого массива, reportSections. Затем я перебираю значения date group и record date и добавляю уникальные значения в мой массив reportSections.

let reportSections = [];
    let dataGroups = new Set();
    let recordDates = new Set();
    data.forEach(item => {
      dataGroups.add(item['date group']);
      recordDates.add(item['record date']);
    });
    for (const [index, value] of [...dataGroups].entries())
      reportSections.push({
        id: value,
        name: [...recordDates][index]
      });

Вот небольшой пример того, как данные выглядят внутри data переменная, через которую я буду проходить:

[
  {
     'record date': '2020-04-01',
     'date group': 'MONTH START'
  },
  {
     'record date': '2020-04-01',
     'date group': 'MONTH START'
  },
  {
     'record date': '2020-04-05',
     'date group': 'MONTH TO DATE - Week 1'
  },
  {
     'record date': '2020-04-05',
     'date group': 'MONTH TO DATE - Week 1'
  }
]

Однако теперь мне нужно сделать что-то очень похожее на три другие части моего кода, но это немного другая настройка, так как вместо этого необходимо добавить значения в объекты массива и, следовательно, не может использовать метод pu sh (). Вот как выглядит текущий код:

let filteredData = {
    monthstart: _.filter(data, {'date group': 'MONTH START'}),
    monthstart_week1: _.filter(data, {'date group': 'MONTH TO DATE - Week 1'}),
    monthstart_week2: _.filter(data, {'date group': 'MONTH TO DATE - Week 2'}),
  };

  let combinedData = {
    monthstart: [],
    monthstart_week1: [],
    monthstart_week2: [],
  };

  let reportMap = {
    monthstart: {},
    monthstart_week1: {},
    monthstart_week2: {},
  };

Обычно у меня есть этот жестко запрограммированный код, но поскольку я буду иметь дело с динамическими датами c, и в данном месяце может быть разное количество недель, Мне нужно что-то динамическое c на моем конце. У меня вопрос: как я могу oop просмотреть данные и отобразить каждый уникальный date group в filteredData, combinedData и reportMap, как я делал для своего массива reportSections?

Sidenote:

Пустые массивы и объекты в combinedData и reportMap останутся такими же, как и есть, с изменением только фактического имени (ie monthstart будет динамически меняться но [] или {} не изменились бы. С filteredData имя также изменится (ie monthstart), и мне также потребуется то же значение из date group, которое будет использоваться в _.filter() часть.

Я надеюсь, что смог объяснить это достаточно четко. Если мне нужно объяснить больше, просто дайте мне знать, и я могу добавить больше деталей к моему вопросу, но любая помощь будет принята с благодарностью. Спасибо !

1 Ответ

1 голос
/ 13 апреля 2020

Если я понимаю ваш вопрос, вы хотите динамически добавить новую пару ключ-значение к объекту.

Вы можете сделать это так:

const myObject = {};
// loop start
  myObject["myDynamicKey"] = "myDynamicValue";
// loop end

или так, используя оператор распространения:

let myObject = {};
// loop start
  myObject = {...myObject, ["myDynamicKey"]: "myDynamicValue"}
// loop end
...