【问题标题】:How do I loop through an array of objects to add objects for missing values如何循环遍历对象数组以添加缺少值的对象
【发布时间】:2020-11-03 15:54:06
【问题描述】:

我有一个按周(周日至周六)过滤数据的条形图。但是,当缺少“一天”时,我会在图表中得到一个空白区域,我想用“0”的值填充那一天。

代码和数据:

const data = [{value: 2, createdDate: "20201025", day: "Sun" }, {value: 7, createdDate: "20201027", day: "Tue", {value: 5, createdDate: "20201028", day: "Wed"}];

const startOfWeek = moment().startOf('isoWeek');
const endOfWeek = moment().endOf('isoWeek');
const currentWeek = data.filter((e) => moment(e.date) >= startOfWeek && moment(e.date) <= endOfWeek);

如何将值为 0 的 Mon、Thu、Fri 和 Sat 添加到 currentWeek 数组?

【问题讨论】:

  • createdDate应该填什么?什么都没有?
  • moment函数来自momentJS库吗?
  • createdDate 不需要填写,是的时刻来自 momentJS 库

标签: javascript arrays


【解决方案1】:

制作一个要测试的工作日数组:

const weekdays = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];

遍历它们,在currentWeek 不包含该工作日时添加一个“零”事件:

weekdays.forEach( function(weekday) {
  let found = false; // assume
  for ( var i=0; i < currentWeek.length; i++ ) {
     if ( currentWeek[i].day == weekday ) {
        found = true;
        break;
     }
  }

  // weekday isn't in currentWeek, so add it:
  if ( ! found ) {
     currentWeek = currentWeek.concat( { value: 0, day: weekday } );
  }
} );

【讨论】:

    【解决方案2】:

    其实我觉得你可以换个角度想。
    首先你伪造一个每天的数组,如下所示:

    {value: 0, createdDate: "20201001", day: "Sun" }

    之后你可以将两个数组合并在一起。

    【讨论】:

      【解决方案3】:

      如果您在数组中的日期顺序无关紧要,我会这样做:

      // create an array of short weekdays from moment
      const weekdays = moment.weekdaysShort();
      
      // iterate over the days
      for (const day of weekdays) {
      
        // check if this day does not exist in the current week
        if (!currentWeek.find(el => el.day == day)) {
      
          // if not, add it
          currentWeek.push({value: 0, day});
        }
      }
      

      A fiddle 示例

      【讨论】:

        猜你喜欢
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-22
        • 2021-08-27
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多