题目描述
公司用一个字符串来表示员工的出勤信息:
- absent: 缺勤
- late: 迟到
- leaveearly:早退
- present: 正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖。
能获得出勤奖的条件如下:
- 缺勤不超过1次
- 没有连续的迟到/早退
- 任意连续7次考勤 缺勤/迟到/早退 不超过3次
输入描述
用户的考勤数据字符串记录条数 >=1,输入字符串长度 <10000,不存在非法输入。
如:
2
present
present absent present present leaveearly present absent
输出描述:
根据考勤数据字符串,如果能得到考勤奖,输出"true";否则输出"false",
对于输入示例的结果应为: true false
示例1 :输入
2
present
present present
输出
true true
示例2 输入
2
present
present absent present present leaveearly present absent
输出
true false
解析代码
function attendanceInfo(data) {
let result = [];
for (const str of data) {
const noAbsent = (str.match(/absent/g) ?? []).length < 1; // 是否有缺勤的
// 匹配多个字符,看缺勤,迟到,早退的个数是否超过3.
const noAgainstRule = (str.match(/(absent|leaveearly|late)/g) ?? []).length < 3;
// 是否有连续的迟到,早退,\x20表匹配空格, \1代表第一个括号匹配的内容
const noContinueStr = str.match(/(leaveearly|late)(\x20)*\1/g) ?? [].length === 0;
result.push(noAbsent && noAgainstRule && noContinueStr);
}
return result.join(' ');
}
console.log(attendanceInfo(['present', 'present absent present present leaveearly leaveearly present absent late late']));