有没有最简单的方法来计算重复的一天?

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]