有没有最简单的方法来计算重复的一天?
is there any simplest way to calculate a recurring day?
我有一个以数字格式从数据库接收的重复数据。
我有一个复选框,它显示了这个值的日期:
[64, 32, 16, 8, 4, 2, 1] // monday to sunday
这就是我如何将它们重新定义为清单,以便我可以在复选框中显示。:
switch (recurring) {
case 127:
this.checkedList = [64, 32, 16, 8, 4, 2, 1];
break;
case 126:
this.checkedList = [64, 32, 16, 8, 4, 2];
break;
case 125:
this.checkedList = [64, 32, 16, 8, 4, 1];
break;
case......
default:
this.checkedList = [recurring];
}
但我认为这不是一个好的做法,因为执行结果需要很长的代码。有什么办法可以让它变得更简单吗?
这些是 2 的幂,用于 bit field。
您应该使用按位运算符 &
.
来判断给定日期是否为 "checked"
const SUNDAY = 64; // 0100 0000
const SATURDAY = 32; // 0010 0000
const FRIDAY = 16; // 0001 0000
const THURSDAY = 8; // 0000 1000
// etc.
let day = 48; // 0011 0000
day & SUNDAY // 0 indicating Sunday should not be checked
day & SATURDAY // 32 indicating Saturday should be checked
day & FRIDAY // 16 indicated Friday should be checked
day & THURSDAY // 0 indicated Thursday should not be checked
如果您想将其转换为检查值数组,最简单的选择是停止使用位域,而是存储一个 JSON 字符串数组。
假设这是不可能的,你的案例陈述可以用简单的东西代替...
const DAYS = [ 1, 2, 4, 8, 16, 32, 64 ];
const dayBitfield = 41;
DAYS.filter(day => dayBitfield & day) // [1, 8, 32]
我有一个以数字格式从数据库接收的重复数据。
我有一个复选框,它显示了这个值的日期:
[64, 32, 16, 8, 4, 2, 1] // monday to sunday
这就是我如何将它们重新定义为清单,以便我可以在复选框中显示。:
switch (recurring) {
case 127:
this.checkedList = [64, 32, 16, 8, 4, 2, 1];
break;
case 126:
this.checkedList = [64, 32, 16, 8, 4, 2];
break;
case 125:
this.checkedList = [64, 32, 16, 8, 4, 1];
break;
case......
default:
this.checkedList = [recurring];
}
但我认为这不是一个好的做法,因为执行结果需要很长的代码。有什么办法可以让它变得更简单吗?
这些是 2 的幂,用于 bit field。
您应该使用按位运算符 &
.
const SUNDAY = 64; // 0100 0000
const SATURDAY = 32; // 0010 0000
const FRIDAY = 16; // 0001 0000
const THURSDAY = 8; // 0000 1000
// etc.
let day = 48; // 0011 0000
day & SUNDAY // 0 indicating Sunday should not be checked
day & SATURDAY // 32 indicating Saturday should be checked
day & FRIDAY // 16 indicated Friday should be checked
day & THURSDAY // 0 indicated Thursday should not be checked
如果您想将其转换为检查值数组,最简单的选择是停止使用位域,而是存储一个 JSON 字符串数组。
假设这是不可能的,你的案例陈述可以用简单的东西代替...
const DAYS = [ 1, 2, 4, 8, 16, 32, 64 ];
const dayBitfield = 41;
DAYS.filter(day => dayBitfield & day) // [1, 8, 32]