【发布时间】:2016-08-18 05:04:54
【问题描述】:
我想知道是否有一种方法可以让我有效地存储布尔数组。据我了解,JavaScript 中的每个布尔变量都需要 1 个字节或 8 位来存储。但是,如果我想存储一个布尔值数组,8 位实际上可以存储多达 8 个布尔值。剩下的 7 位被浪费了。
在 C 或 Java 等语言中,人们可以使用“>>”、“~”等位操作将布尔数组存储为 int 值。但是,这在 JavaScript 中效果不佳,因为它在 JavaScript 中运行速度非常慢,因为它需要将浮点数转换为 int (See this question)。
我还注意到 JavaScript 中的 Buffer 直接存储二进制数据。但是,我找不到使用它来存储布尔数组的方法。我认为 Buffer 更专注于编码。例如,如果我想将布尔数组的第五位设置为 true,我可以执行 data |= 1<<4,但我在 Buffer 中找不到这样做的方法。
有什么办法吗?
【问题讨论】:
-
“它在 JavaScript 中运行速度极慢”——不要被 09 年的问题和 12 年的答案所迷惑。 JS 引擎已经向前发展,优化整数/位算术是最简单的事情之一。
-
FWIW v8 对“小”整数 (SMI) 进行了优化。你可以阅读这些限制here。您也可以使用缓冲区,但由于它们使用字节,您将被限制为每个索引 8 个布尔值。
-
要访问缓冲区,您需要使用typed array,例如
Uint8Array -
@Bergi 好的,谢谢。 :) 下次我应该做基准测试
标签: javascript arrays node.js binary boolean