微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将对象数组的日期值与字符串数组中的日期进行比较

如何解决将对象数组的日期值与字符串数组中的日期进行比较

我有以下用例,而且我已经堆积了好几天。

我有一个包含字符串格式的日期的数组,如下所示:

var rows = ["23-01-2021","24-01-2021","25-01-2021","26-01-2021","27-01-2021","28-01-2021"]

我还有一个数据结构,其中包含每个员工的工作日

var schedule = [{
    id: 1,name: "Chandler Bing",times: [

      {
        start: "9.00",end: "17.00",date: "25-01-2021"
      },{
        start: "9.00",date: "26-01-2021"
      },date: "28-01-2021"
      },]
  },{
    id: 2,name: "Employee 2",date: "23-01-2021"
      },date: "27-01-2021"
      },date: "28-01-2021"
      }
    ]
  }
]

我想比较每个员工的日期数组和时间数组。如果时间数组中缺少日期,则创建一个具有空值的对象...实际上我想最终得到如下数据结构。

var schedule = [{
  id: 1,name: "Employee 1",times: [{
      start: "",end: "",date: ""
    },{
      start: "",{
      start: "9.00",date: "25-01-2021"
    },date: "26-01-2021"
    },date: "28-01-2020"
    }
  ]
},{
  id: 2,times: [

    {
      start: "",date: "27-01-2021"
    },date: "28-01-2021"
    },]
}
]]

到目前为止我已经实现了这个逻辑,但显然不起作用

var rows = ["23-01-2021","28-01-2021"]
var schedule = [{
  id: 1,times: [{
      start: "9.00",]
}]


var arr = []
var test = {};

rows.forEach(function(row,index) {
  schedule.forEach(function(entry) {
    entry.times.forEach(function(times,index) {
      console.log(row)
      if (times.date === row) {
        test = {
          start: times.start,end: times.end,date: times.date
        }
        arr.push(test)
      } else {
        test = {
          start: "",date: ""
        }
        arr.push(test);
      }
    })
  })
})
console.log(arr);

感谢每一个帮助...

解决方法

您可以映射行并查看 times 并在日期具有相同值时采用此对象。

这种方法的特点是对索引进行闭包,需要 scheduletimes 数组的排序数据。

const
    rows = ["23-01-2021","24-01-2021","25-01-2021","26-01-2021","27-01-2021","28-01-2021"],schedule = [{ id: 1,name: "Chandler Bing",times: [{ start: "9.00",end: "17.00",date: "25-01-2021" },{ start: "9.00",date: "26-01-2021" },date: "28-01-2021" }] },{ id: 2,name: "Employee 2",date: "23-01-2021" },date: "27-01-2021" },date: "28-01-2021" }] }],result = schedule.map(o => ({ ...o,times: rows.map((i => date => o.times[i]?.date === date
       ? o.times[i++]
       : { start: "",end: "",date: "" }
    )(0)) }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。