typescript - 如果不存在,则将日期插入数组 - 打字稿
问题描述
我有以下数组,其中包含周数组。每周内有一系列天:
weeks: Array(4)
0: Array(4)
days: Array(4)
0: {name: "Tuesday", sessions: Array(2), date: "2020-09-22T01:00:00.000Z"}
1: {name: "Wednesday", sessions: Array(2), date: "2020-09-23T01:00:00.000Z"}
2: {name: "Thursday", sessions: Array(2), date: "2020-09-24T01:00:00.000Z"}
3: {name: "Friday", sessions: Array(2), date: "2020-09-25T01:00:00.000Z"}
1: Array(4)
days: Array(4)
0: {name: "Monday", sessions: Array(2), date: "2020-09-22T01:00:00.000Z"}
1: {name: "Tuesday", sessions: Array(2), date: "2020-09-23T01:00:00.000Z"}
2: {name: "Wednesday", sessions: Array(2), date: "2020-09-24T01:00:00.000Z"}
3: {name: "Thursday", sessions: Array(2), date: "2020-09-25T01:00:00.000Z"}
但是,像上面这样的一些星期缺少几天,第一个缺少星期一,第二个缺少星期五。如何循环遍历周数数组,检查缺失的日期,如果缺失则添加它们,以及当天的正确日期?
此外,每天还有一个会话数组,其中包含以下数据:
sessions: Array(2)
0:
code: "N/A"
session: "AM"
0:
code: "N/A"
session: "PM"
我将如何将此会话数组(具有这些确切值)添加到我添加的每一天?
这是我到目前为止所拥有的:
for (const week of weeks)
{
let monday = false;
for (const day of week)
{
if (day.name === 'Monday')
{
monday = true;
}
}
if (monday === false)
{
//ADD DAY HERE
}
}
在此先感谢您的帮助
解决方案
只要我们只是填补空白,它就非常简单。
设置一天
enum
(days
) 以确保阵列顺序准确循环遍历数据
获取
reference
现有日期中可用的日期week array
(稍后我们将使用它)将现有减少
week array
为week object
键是day
名称,值是现有的week data
取我们现有的
enum
仅获numerical
取值,按值排序,numerical
然后执行以下操作- 获取对应
day
的numerical
值 - 检查是否
day
存在于我们的week object
- 如果是,则返回现有的
week object
- 否则,创建一个
week object
- 获取对应
创建一个
week object
- 我们已经有了对应的
day
,用它作为name
- 我们
sessions
可以创建 date
是棘手的部分
- 我们已经有了对应的
建立
date
- 检查当前
day
索引是否大于或小于我们的reference index
- 如果小于,我们想
date
使用 our创建一个新的reference date
,然后通过我们当前day
索引和我们的reference index
. 例如
// Tuesday < Thursday 1 < 3 // true 3 - 1 // 2 // We know that we need to shift our reference date(Thursday) 2 days back to get Tuesday's date
- 如果大于,则反向应用相同的策略
- 检查当前
// Input Data
const weeks = [
[{
name: "Tuesday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-22T01:00:00.000Z"
},
{
name: "Wednesday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-23T01:00:00.000Z"
},
{
name: "Thursday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-24T01:00:00.000Z"
},
{
name: "Friday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-25T01:00:00.000Z"
}
],
[{
name: "Monday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-22T01:00:00.000Z"
},
{
name: "Tuesday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-23T01:00:00.000Z"
},
{
name: "Wednesday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-24T01:00:00.000Z"
},
{
name: "Thursday",
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: "2020-09-25T01:00:00.000Z"
}
]
];
// Actual Code
const days = {
0: "Monday",
1: "Tuesday",
2: "Wednesday",
3: "Thursday",
4: "Friday",
Monday: 0,
Tuesday: 1,
Wednesday: 2,
Thursday: 3,
Friday: 4
};
function handleWeek(week) {
const referenceDate = new Date(week[0].date),
referenceIndex = days[week[0].name];
const weekObject = week.reduce((acc, cv) => (Object.assign(Object.assign({}, acc), {
[cv.name]: cv
})), {});
return Object.keys(days)
.filter(key => !isNaN(+key))
.sort()
.map((dayIndex, index) => {
const day = days[dayIndex];
return weekObject[day] ?
weekObject[day] : {
name: day,
sessions: [{
code: "N/A",
session: "AM"
},
{
code: "N/A",
session: "PM"
}
],
date: referenceIndex < index ?
new Date(new Date(referenceDate).setDate(referenceDate.getDate() + (index - referenceIndex))).toISOString() : new Date(new Date(referenceDate).setDate(referenceDate.getDate() - (referenceIndex - index))).toISOString()
};
});
}
const result = weeks.map(week => handleWeek(week));
console.log(result);
推荐阅读
- swift - Swift 允许协议属性和具有不相关类型属性的符合对象之间的名称冲突
- neo4j - Neo4j 多对一关系
- c# - 如何使用 .ToCharArray 检查用户输入是否包含任何字母
- sql-server - 用以前的非空值填充缺失的数据 - 但仅限于简单的 SQL
- python - 适用于 Mac 的 Microsoft Word Api
- android - 统一构建游戏,但是当游戏部署到 Android 设备时,它会突然关闭
- regex - 为什么 Perl 不打印在单行中找到的所有正则表达式匹配?
- generics - kotlin 中具有内部类的泛型
- java - 如何删除 json 文件中的特定字符串?
- javascript - 在使用 innerHtml 呈现 html 表时停止 Jquery 以自动触发 onclick 事件