我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
当前回答
如果你保证你的输入是1或0,那么你可以使用:
v = 2+~v;
其他回答
v = v == 0 ? 1 : 0;
够了!
v = (v + 1) % 2,如果你需要循环更多的值,只需将2改为(n + 1),假设你需要循环0,1,2,只需做v = (v + 1) % 3。
为了总结另一个答案,一个评论和我自己的观点,我建议结合两件事:
使用一个函数进行切换 在这个函数中使用一个可读性更好的实现
下面是一个函数,你可以把它放在一个库中,也可以把它包装在另一个Javascript框架的插件中。
function inv(i) {
if (i == 0) {
return 1
} else {
return 0;
}
}
用法很简单:
v = inv(v);
优点是:
无代码复制 如果您或任何人将来再次阅读这篇文章,您将在最短的时间内理解您的代码。
v = !v * 1
乘以1将布尔值转换为数字
未经测试,但如果你是布尔,我认为var v = !v将工作。
参考:http://www.jackfranklin.co.uk/blog/2011/05/a-better-way-to-reverse-variables