gpt4 book ai didi

javascript - 字符串化数组是一个好习惯吗?

转载 作者:行者123 更新时间:2023-12-01 17:14:54 25 4
gpt4 key购买 nike

假设我有一个由 boolean 值组成的数组。

myArray = [false,false,false]

而且我需要根据每个状态做不同的事情。

例如:

[false,true,false], [false,false,true], [true,true,false], ...

等等。

通常这种操作是通过检查每个单独的元素是否合适来完成的。

例如:

if(!myArray[0] && myArray[1] && !myArray[2]) do A
if(!myArray[0] && !myArray[1] && myArray[2]) do B
if(myArray[0] && myArray[1] && !myArray[2]) do C
...

而不是那样做。我将数组转换为字符串:

switch(JSON.stringify(myArray))
case : "[false,true,false]"
do A
break
case : "[false,false,true]"
do B
break
case : "[true,true,false]"
do C
break
......

这被认为是好的做法吗?使用此方法我可能会遇到任何隐藏的错误吗?这种方法会增加可读性吗?

最佳答案

关于使用 JSON.stringify

JSON.stringify 的使用对于(JSON 兼容的)原语(即 boolean 值、字符串、数字、null)的数组(或数组(或数组...))可以正常工作。没有歧义。 ECMAScript 规范也清楚地说明了在不同值之间产生的“差距”:它应该是空字符串,除非通过可选参数明确定义不同。参见 ECMAScript Language Specification on the topic .

需要注意的是 undefined 不是 JSON 中的内容,因此 [null][undefined] 都将被字符串化为“[无效的]”。但由于您只使用了 falsetrue,所以这不是问题。

现在回答您的问题:

Is this considered good practice?

这是一个见仁见智的问题。我的第一直觉说“不”,主要是因为类型转换,但由于您的特定用例(即 boolean 数组)没有任何警告,我们真的没有太多可批评的地方。

Is there any hidden error I might face with this method?

没有

Will this method increase readability ?

然而,至少有一种替代方案具有所有相同的优点,但不依赖于某些数据类型转换:

替代方案:位集

如果您的数组是 boolean 数组,您可以选择使用数字数据类型,其中数字的每个二进制位对应数组版本中的一个 boolean 值。

预计此方法将比 strinfigication 选项更有效,因为数据类型转换显然需要一些时间。

这是原始数组模式的运行:

let arr = [false, false, true];

if (!arr[0] && arr[1] && !arr[2]) console.log("do A");
if (!arr[0] && !arr[1] && arr[2]) console.log("do B");
if (arr[0] && arr[1] && !arr[2]) console.log("do C");

下面是使用位集实现的相同逻辑:

let bitset = 0b001;

if (bitset === 0b010) console.log("do A");
if (bitset === 0b001) console.log("do B");
if (bitset === 0b110) console.log("do C");

如果您需要比数字数据类型(53 位)更多的位,那么您可以选择 BigInt。例如:

let bitset = 0b1010101010101010101010101010101010101010101010101010101n;

// A partial comparison
if ((bitset & 0b100010001n) === 0b100010001n) console.log("do A");

当然,0b字面量不是必须的;这只是为了突出与数组版本的对应关系。您可以通过以十六进制表示法 (0x) 或什至是纯十进制表示法来保存一些字符,尽管后者对于您的代码的读者来说更加晦涩难懂。

关于javascript - 字符串化数组是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63480324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com