将 Coffeescript 中的 true 和 false 分别转换为 1 和 -1

发布于 2024-12-22 19:05:14 字数 468 浏览 0 评论 0原文

if x < change.pageX # pageX is cross-browser normalized by jQuery
            val = Number(elem.text())
            return elem.text(o.max) if val + o.step > o.max
            return elem.text(o.min) if val + o.step < o.min
            elem.text(val + o.step)
else x > change.pageX
  # same thing, only - instead of +

(咖啡脚本,但你明白了)。我正在寻找一种技巧来获取布尔值并将其转换为 1(真)或 -1(假)。这样我就可以执行 val + returned_bool * o.step 并保存 if。

if x < change.pageX # pageX is cross-browser normalized by jQuery
            val = Number(elem.text())
            return elem.text(o.max) if val + o.step > o.max
            return elem.text(o.min) if val + o.step < o.min
            elem.text(val + o.step)
else x > change.pageX
  # same thing, only - instead of +

(Coffee Script, but you get the idea). I'm looking for a trick to take a boolean and convert it to either 1 (true) or -1 (false). that way I can do val + converted_bool * o.step and save an if.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

笑叹一世浮沉 2024-12-29 19:05:14

你可以这样做...

+x||-1

  • 如果x===true,则+x1,并且-1 短路。

  • 如果x===false,则+x0,并返回-1 .


这是另一种方式...

[-1,1][+x]
  • 如果x===true[+x]将获取索引1。

  • 如果x===false[+x]将获取数组的索引0

You can do it like this...

+x||-1

  • If x===true, the +x is 1, and the -1 is short-circuited.

  • If x===false, the +x is 0, and the -1 is returned.


Here's another way...

[-1,1][+x]
  • If x===true, [+x] will grab index 1 of the Array.

  • If x===false, [+x] will grab index 0 of the Array.

狼性发作 2024-12-29 19:05:14

听起来像是条件(三元)运算符的工作

if true then 1 else -1
1
if false then 1 else -1
-1

Sounds like a job for a conditional (ternary) operator

if true then 1 else -1
1
if false then 1 else -1
-1
(り薆情海 2024-12-29 19:05:14

我觉得这样会起作用:

b2i = (x) -> if x then 1 else -1
b2i(true)  # => 1
b2i(false) # => -1

该函数定义将导致(不是很令人兴奋)JavaScript:

var b2i;

b2i = function(x) {
  if (x) {
    return 1;
  } else {
    return -1;
  }
};

注意 CoffeeScript ? 是存在运算符,因此

x ? 1 : -1

会转换为有点意外的 smth作为

if (typeof x !== "undefined" && x !== null) {
  x;
} else {
  ({ 1: -1 });
};

I smth like that will work:

b2i = (x) -> if x then 1 else -1
b2i(true)  # => 1
b2i(false) # => -1

That function definition will result into that (not very exciting) JavaScript:

var b2i;

b2i = function(x) {
  if (x) {
    return 1;
  } else {
    return -1;
  }
};

Note that CoffeeScript ? is existential operator so

x ? 1 : -1

will convert to smth a bit unexpected as

if (typeof x !== "undefined" && x !== null) {
  x;
} else {
  ({ 1: -1 });
};
多像笑话 2024-12-29 19:05:14

(~true)+3 和 (~false) 会给你 1 和负 1 :)

(~true)+3 and (~false) will give you 1 and negative one :)

丶视觉 2024-12-29 19:05:14

啊哈!

2 * (!!表达式) - 1

Ah Ha!

2 * (!!expression) - 1

坏尐絯℡ 2024-12-29 19:05:14

您是否正在寻找除此普通 javscript 之外的任何内容:

boolVal ? 1 : -1

或者以函数形式:

function convertBool(boolVal) {
    return(boolVal ? 1 : -1);
}

涉及布尔值的直接数学将 true 转换为 1 并将 false 转换为 < code>0:

var x,y;
x = false;
y = 2;
alert(y + x);  // alerts 2

x = true;
y = 2;
alert(y + x);  // alerts 3

如果对性能感兴趣,这里有一个 jsperf 测试< /a> 提供的四种方法如下答案在这里。在 Chrome 中,三元解决方案的速度快了 7 倍以上。

Are you looking for anything beyond this plain javscript:

boolVal ? 1 : -1

Or, in function form:

function convertBool(boolVal) {
    return(boolVal ? 1 : -1);
}

Straight math involving boolean values converts true to 1 and false to 0:

var x,y;
x = false;
y = 2;
alert(y + x);  // alerts 2

x = true;
y = 2;
alert(y + x);  // alerts 3

If performance is of interest, here's a jsperf test of four of the methods offered as answers here. In Chrome, the ternary solution is more than 7x faster.

还给你自由 2024-12-29 19:05:14

您还可以在 CoffeeScript 中输入 javascript:

foo = `bar ? 1 : -1`

You can also type javascript inside coffeescript:

foo = `bar ? 1 : -1`
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文