【问题标题】:Looping through data and dynamically storing it in objects循环遍历数据并将其动态存储在对象中
【发布时间】:2020-04-13 13:18:14
【问题描述】:

目前,我从一个空数组开始,reportSections。然后我循环遍历date grouprecord 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'
  }
]

然而,现在我需要做一些与我的代码的其他三个部分非常相似的事情,但它的设置有点不同,因为需要将值添加到对象而不是数组,因此不能使用 push() 方法。这是当前代码的样子:

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: {},
  };

通常我有这个硬编码,但由于我将处理动态日期并且在给定的月份中可能有不同的周数,所以我需要有一些动态的东西。 我的问题是,如何循环数据并在 filteredDatacombinedDatareportMap 中显示每个唯一的 date group,就像我对 reportSections 数组所做的那样? p>

旁注:

combinedDatareportMap 中的空数组和对象将保持原样,仅更改实际名称(即monthstart 会动态更改,但[]{} 不会。使用@ 987654339@,名称也会改变(即monthstart),我还需要date group 中的相同值用于_.filter() 部分。

我希望我能够足够清楚地解释这一点。如果我需要解释更多,请告诉我,我可以为我的问题添加更多细节,但任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: javascript arrays loops javascript-objects


    【解决方案1】:

    如果我理解您的问题,您希望向对象动态添加新的键值对。

    你可以这样做:

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

    或者像这样,使用扩展运算符:

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

    【讨论】:

    • 这太棒了!我在 reportSections 数组的 for 循环中使用了它,它就像我需要的那样工作!非常感谢!
    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 2021-06-06
    • 2018-09-26
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2017-02-16
    • 2020-01-06
    相关资源
    最近更新 更多