.compact(.map(_.toArray(n.toString(2)).reverse(), (v, i) => 2 ** i * v))

包含 underscore 和 es2016 语法

功能

将一个数转换成多个2的N次方的数的和

输入 二进制 输出
1 0001 [1]
6 0110 [2,4]
7 0111 [1,2,4]

用途

数据库中以整数形式存储,界面上以多选的形式展现

<select multiple>
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="4">c</option>
</select>

<script>
  $('select').val([2,4])
</script>

数据库存了6,取到前端,转换成 [2,4],同时选中 b 和 c

分解动作

假设 n = 6

n // 6
n.toString(2) // '110'
_.toArray(n.toString(2)) // ['1', '1', '0']
_.toArray(n.toString(2)).reverse() // ['0', '1', '1']
_.map(_.toArray(n.toString(2)).reverse(), (v, i) => 2 ** i * v) // [0, 2, 4]
_.compact(_.map(_.toArray(n.toString(2)).reverse(), (v, i) => 2 ** i * v)) // [2, 4]

其他写法

_.chain(n.toString(2)).toArray().map((b, i, a) => 2 ** (a.length - i - 1) * b).compact().value()
_.compact(_.range(32).map((v) => 2 ** v & n)) // 最大处理32位整型

更多

Quasar中的前端代码转译

使用 Quasar 时,如何完成浏览器兼容性的配置。 制定兼容范围 在进行实际配置前,首先必须确定要支持浏览器的版本,而确定浏览器版本则需要先明确业务对象的情况。 为什么不干脆把标准定的越高越好呢?比如支持100%的用户。这是因为支持率越高,可用的新语法越少,意味着更多的转译代码和 polyfill,这会带来额外的代码量,从而导致下载数据量增加,以及运行速度变慢的问题,为了0.01%影响99.99%用户的体验并增加他们的流量开销,是否合适呢?这就需要根据实际业务进行取舍和平衡。 比如我们的业务对象既有企业用户,也有公众用户,企业用户主要使用钉钉,并可对其PC浏览器进行要求,而公众用户主要使用微信。 确定常用浏览器版本 PC浏览器可以指定,那么对浏览器版本就不需要过多考虑,但是部分客户还有XP系统,那么也就确定了 Chrome 浏览内核的版本不可以超过 49; 微信用户可能在手机登录,也可能在PC登录,而PC中的微信内置是QQ浏览器9,其内核版本是 Chrome 53; 电脑端的钉钉内置浏览器已经是 Chrome 91; 手机端的话考虑到安卓手机使

By 熊立丁
浙ICP备15043004号-1