【发布时间】:2023-03-22 06:12:01
【问题描述】:
假设我有一个由布尔值组成的数组。
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
......
这被认为是好的做法吗?使用这种方法可能会遇到任何隐藏的错误吗? 这种方法会增加可读性吗?
【问题讨论】:
-
感觉你的原始数组一开始就应该是一个位集,但这可能会因上下文而异。
-
ShioT 说了什么。你也可以尝试把它变成一个对象:
{prop1: true, prop2: true,...}。这样您可以获得更多的可读性,因为您使用键来检查值。你现在这样做的方式,我可以想象它会很快变得混乱。如果您在几个月甚至几年后查看该代码,将很难弄清楚为什么这个订单会这样做,而另一个订单会做其他事情。 -
没错,使用带命名的对象可能是比纯数组更好的解决方案。字符串化对象也应该产生一个更复杂的唯一字符串,具有更高的可读性
-
您是否确信 JSON 字符串化操作已标准化到可靠且永远不会改变的程度?例如,某些特定的浏览器是否会将结果字符串化为
"[false, false, false]"(带空格)?就 JSON 而言,它与结果一样有效,但会破坏您的代码…… -
@deceze 有可能,但很可能不会发生。 JSON.stringify() 有一个可选的“空格”参数,可以在需要时插入空格。默认情况下不应该添加空格。或者,如果您特别偏执并且想要安全。只需简单地添加 .replace(" ","") 以确保根本没有空格。
标签: javascript arrays switch-statement boolean