Есть ли самый простой способ рассчитать повторяющийся день? - PullRequest
0 голосов
/ 07 января 2020

У меня есть повторяющиеся данные, полученные из базы данных в числовом формате.

, и у меня есть флажок, который показывает день с этим значением:

[64, 32, 16, 8, 4, 2, 1] // monday to sunday

, и вот как я переопределил их в Контрольный список, чтобы я мог показать в checkbox. Есть ли способ, как я мог бы сделать его более простым?

1 Ответ

1 голос
/ 07 января 2020

Это степени двух, предназначенные для использования в битовом поле .

. Вы должны сказать, проверяется ли данная дата с помощью побитового оператора &.

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.

Предполагая, что это невозможно, ваше утверждение case может быть заменено чем-то простым: ...

const DAYS = [ 1, 2, 4, 8, 16, 32, 64 ];

const dayBitfield = 41;

DAYS.filter(day => dayBitfield & day) // [1, 8, 32]
...