【问题标题】:Filtering out schedule data to display过滤出要显示的计划数据
【发布时间】:2021-06-24 15:29:09
【问题描述】:

您好,我正在尝试过滤掉不应出现在此计划中的数据

我目前有这个有过滤数据的功能

       const formatData = (input: any) => {
    const data: any = _.uniqBy(input.Value, 'Activity Id');
    const formatDate = (text: any) =>
      moment(text as string).format('YYYY-MM-DD');
    // Data being returned from thirdparty isn't filtering out certain data
    const filtered = data.filter(
      (e: any) =>
        (formatDate(e['Start Date ']) <= formatDate(query.Start_Date) &&
          formatDate(e['End Date']) >= formatDate(query.End_Date)) ||
        (formatDate(e['Start Date ']) >= formatDate(query.Start_Date) &&
          formatDate(e['End Date']) <= formatDate(query.End_Date)) ||
        (formatDate(e['Start Date ']) >= formatDate(query.Start_Date) &&
          formatDate(e['Start Date ']) <= formatDate(query.End_Date))
    );
    return { Value: filtered };
  };

过滤器不正确我试图找出简单的方法来过滤掉不在这两个查询 req.query.end 和 start 之间的日期

这个数据集的样本

 {
  Value: [
    {
      "Activity Id": "05005413-05",
      "Activity Name": "UNIT 1  ASBESTOS REMOVAL; PERMITS (CSP, FSI, HWP)",
      "Start Date ": "2020-11-09 07:00:00.0",
      "End Date": "2021-05-17 15:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2119",
      "Activity Name": "Begin Work Week 2119",
      "Start Date ": "2021-05-10 00:00:00.0",
      "End Date": "2021-05-10 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2118",
      "Activity Name": "Begin Work Week 2118",
      "Start Date ": "2021-05-03 00:00:00.0",
      "End Date": "2021-05-03 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04901693-05",
      "Activity Name": "NEW LPRM IV TEST RE-SET PM FOR NEXT CYCLE.",
      "Start Date ": "2021-04-23 01:00:00.0",
      "End Date": "2021-04-23 03:00:00.0",
      "Unit ": "02",
      Status: "PLAN",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04901693-04",
      "Activity Name": "20C037           IV CURVES ON SELECTED U2 LPRM'S",
      "Start Date ": "2021-04-22 07:00:00.0",
      "End Date": "2021-04-22 15:00:00.0",
      "Work Group Name": "PMI3",
      "Unit ": "02",
      Status: "PLAN",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2116",
      "Activity Name": "Begin Work Week 2116",
      "Start Date ": "2021-04-19 00:00:00.0",
      "End Date": "2021-04-19 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2121",
      "Activity Name": "Begin Work Week 2121",
      "Start Date ": "2021-05-24 00:00:00.0",
      "End Date": "2021-05-24 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "05005413-35",
      "Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
      "Start Date ": "2020-11-09 06:00:00.0",
      "End Date": "2021-06-03 16:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04912309-35",
      "Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
      "Start Date ": "2020-11-09 06:00:00.0",
      "End Date": "2021-06-30 16:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04224121-04",
      "Activity Name": "REBUILD CAT ID 0011698252 AND RETURN TO STORES.",
      "Start Date ": "2021-05-03 07:00:00.0",
      "End Date": "2021-05-05 15:00:00.0",
      "Work Group Name": "PME1",
      "Unit ": "03",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
  ];
}

所以如果开始时间如果 start=23-JUN-2021 end=19-APR-2021 这就是预期的返回结果

 {
  Value: [
    {
      "Activity Id": "05005413-05",
      "Activity Name": "UNIT 1  ASBESTOS REMOVAL; PERMITS (CSP, FSI, HWP)",
      "Start Date ": "2020-11-09 07:00:00.0",
      "End Date": "2021-05-17 15:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2119",
      "Activity Name": "Begin Work Week 2119",
      "Start Date ": "2021-05-10 00:00:00.0",
      "End Date": "2021-05-10 00:00:00.0",
      "Work Pln Factor": ", ",
    },

    {
      "Activity Id": "B2116",
      "Activity Name": "Begin Work Week 2116",
      "Start Date ": "2021-04-19 00:00:00.0",
      "End Date": "2021-04-19 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "05005413-35",
      "Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
      "Start Date ": "2020-11-09 06:00:00.0",
      "End Date": "2021-06-03 16:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04912309-35",
      "Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
      "Start Date ": "2020-11-09 06:00:00.0",
      "End Date": "2021-06-30 16:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
  ];
}

这是处理在前端显示条形的函数

  const timeLine = (data: any, day: string) => {
    return (data || []).map((activity: any) => {
      const startMoment = moment(activity['Start Date ']);
      const endMoment = moment(activity['End Date']);
      const dayStart = moment(day, 'MMM D');
      const duration = 
 moment.duration(endMoment.diff(startMoment));
      let hours = Math.abs(duration.asHours());
      if (hours === 1 || hours === 0) hours = 3;
      let offSetX = 
 moment.duration(startMoment.diff(dayStart)).asHours() + 1;
      const result = {
        numberOfUnits: hours === 0 ? 1 : hours,
        offSetX,
        unitColor: getUnitColor(activity['Unit '], userPlant)
      };
      return result;
    });
  };

【问题讨论】:

  • 尝试复制。我看到了lodash和moment。您正在使用任何其他库吗?
  • 只有这两个库
  • 尝试在下面运行我的代码并滚动到输出的顶部,让我知道您希望包含哪个项目。
  • 您可以使用 chrome 的调试控制台,因为它看起来限制了控制台日志的数量。
  • 我想我可能需要更新前端的 timeLine 函数,我会将该函数添加到帖子中

标签: javascript database algorithm sorting methods


【解决方案1】:

我还没有答案,但如果有人想尝试,他的代码正在运行。 似乎代码正在根据过滤器逻辑正确过滤。

  • 它包括在定义的开始日期之前开始的项目和在定义的结束日期之后的结束日期。 (外)

  • 它包括开始和结束在定义的开始和定义的结束日期(内部)之间的项目

  • 它包括在定义的开始日期之后但在定义的结束日期之前开始的项目。 (从内开始)

const input = {
  Value: [{
      "Activity Id": "05005413-05",
      "Activity Name": "UNIT 1  ASBESTOS REMOVAL; PERMITS (CSP, FSI, HWP)",
      "Start Date ": "2020-11-09 07:00:00.0",
      "End Date": "2021-05-17 15:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2119",
      "Activity Name": "Begin Work Week 2119",
      "Start Date ": "2021-05-10 00:00:00.0",
      "End Date": "2021-05-10 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2118",
      "Activity Name": "Begin Work Week 2118",
      "Start Date ": "2021-05-03 00:00:00.0",
      "End Date": "2021-05-03 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04901693-05",
      "Activity Name": "NEW LPRM IV TEST RE-SET PM FOR NEXT CYCLE.",
      "Start Date ": "2021-04-23 01:00:00.0",
      "End Date": "2021-04-23 03:00:00.0",
      "Unit ": "02",
      Status: "PLAN",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04901693-04",
      "Activity Name": "20C037           IV CURVES ON SELECTED U2 LPRM'S",
      "Start Date ": "2021-04-22 07:00:00.0",
      "End Date": "2021-04-22 15:00:00.0",
      "Work Group Name": "PMI3",
      "Unit ": "02",
      Status: "PLAN",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2116",
      "Activity Name": "Begin Work Week 2116",
      "Start Date ": "2021-04-19 00:00:00.0",
      "End Date": "2021-04-19 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "B2121",
      "Activity Name": "Begin Work Week 2121",
      "Start Date ": "2021-05-24 00:00:00.0",
      "End Date": "2021-05-24 00:00:00.0",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "05005413-35",
      "Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
      "Start Date ": "2020-11-09 06:00:00.0",
      "End Date": "2021-06-03 16:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04912309-35",
      "Activity Name": "SCAFFOLD SUPPORT TEAM - CARPENTERS & LABORERS",
      "Start Date ": "2020-11-09 06:00:00.0",
      "End Date": "2021-06-30 16:00:00.0",
      "Work Group Name": "PSCF",
      "Unit ": "01",
      Status: "READY",
      "Work Pln Factor": ", ",
    },
    {
      "Activity Id": "04224121-04",
      "Activity Name": "REBUILD CAT ID 0011698252 AND RETURN TO STORES.",
      "Start Date ": "2021-05-03 07:00:00.0",
      "End Date": "2021-05-05 15:00:00.0",
      "Work Group Name": "PME1",
      "Unit ": "03",
      Status: "READY",
      "Work Pln Factor": ", ",
    }
  ]
}

 const query = {
 Start_Date:"23-JUN-2021",
 End_Date: "19-APR-2021"};


 const formatData = (input: any) => {
    const data: any = _.uniqBy(input.Value, 'Activity Id');
    const formatDate = (text) => moment(new Date(text)).format('YYYY-MM-DD');
    
  // Data being returned from thirdparty isn't filtering out certain data
  const filtered = data.filter(
    (e: any) => {
    console.log(e["Activity Id"]);
    console.log("query.start", formatDate(query.Start_Date), "query.end", formatDate(query.End_Date));
    console.log("input.start", formatDate(e["Start Date "]), "input.end", formatDate(e["End Date"]));

    
    const outsideOfDates = (formatDate(e['Start Date ']) <= formatDate(query.Start_Date) && formatDate(e['End Date']) <= formatDate(query.End_Date));
    const insideOfDates = (formatDate(e['Start Date ']) >= formatDate(query.Start_Date) && formatDate(e['End Date']) <= formatDate(query.End_Date));
    const startWithin = (formatDate(e['Start Date ']) >= formatDate(query.Start_Date) && formatDate(e['Start Date ']) <= formatDate(query.End_Date));
    
    console.log("out", outsideOfDates, "| in", insideOfDates, "| startwithin", startWithin);
    console.log("passes???", outsideOfDates || insideOfDates || startWithin);
    console.log("+++");        
    return outsideOfDates || insideOfDates || startWithin;

    }
  );
  return {
    Value: filtered
  };
};

console.log(formatData(input));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 2020-07-24
    • 1970-01-01
    • 2014-10-20
    • 2023-03-16
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多