javascript - 如何从总数中启动复选框组值

标签 javascript arrays typescript numbers

我有一组复选框,其值为 1,2,4,8,16,32,64。每个数字分别代表一周中的一天(例如星期日、星期一等...)

复选框组值是所选复选框的总和。周日、周一、周二 = 7。

我无法想出一个函数可以将总和分解回适当的数字,以便在编辑时选择正确的复选框。

(我不能只是将它们的值更改为字符串 - 后端团队是这样设置的)

第一次尝试

`initSpecificDays(){
    let specificDaysArr = [1,2,4,8,16,32,64];
    let daysTotal = 44;
    let selectedDays = specificDaysArr.map(num=>{
      return daysTotal / num;
    })
    console.log(selectedDays)
  }`

最佳答案

您可以通过 bitwise AND & 检查给定值计算值为 1,索引为 << left shift operator .

如果结果是真实的,那么你就成功了。

它的工作原理是查看一个位并比较该位。

An example with 7 for ["Sun", "Mon", "Tue"]

index  left shift  decimal   binary   bitw &   decimal   binary  comment
-----  ----------  -------  -------  --------  -------  -------  -------
   0     1 << 0         1         1   7 &  1        1         1  take
   1     1 << 1         2        10   7 &  2        2        10  take
   2     1 << 2         4       100   7 &  4        4       100  take
   3     1 << 3         8      1000   7 &  8        0         0
   4     1 << 4        16     10000   7 & 16        0         0
   5     1 << 5        32    100000   7 & 32        0         0
   6     1 << 6        64   1000000   7 & 64        0         0

const
    getDays = value => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
        .filter((_, i) => value & 1 << i);

console.log(getDays(7));  // ["Sun", "Mon", "Tue"]
console.log(getDays(65)); // ["Sun", "Sat"]

关于javascript - 如何从总数中启动复选框组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790404/

相关文章:

javascript - map 对象中的值没有增加

javascript - 在 typescript 中导入所有内容不起作用

typescript - 在 Visual Studio 中使用 angular2

javascript - 是否有任何构建 JSON 消息的指南?

javascript - 如何自定义 Javascript 对话选项?

javascript - 如何从 Mapbox GL JS 中的 geojson 源获取独特的特征属性?

Javascript:从字符串初始化变量?

arrays - 如何在 Julia 的矩阵中找到值的位置?

java - 从大小为 N 的数组生成一组 M 个元素的概率

javascript - typescript |与端点的接口(interface)