假设我有一个像这样的代码
var a, b;
b = 1;
var c = b > 0 ? a = 1 /*and c = 2*/ : a = 0 /*and c = 1*/;
console.log(a + c);
有没有办法用上面的代码制作c = 2
和a = 1
?
答案 0 :(得分:7)
您可以使用括号将表达式包装在三元组内,并使用comma operator返回要分配给c
的数字。
var a, b = 1
var c = b > 0 ? (a=1, 2) : (a=0, 1)
console.log(a, c)
使用ES6,您可以使用destructuring assignment将号码分配给a
和c
:
const b = 1
const [a, c] = b > 0 ? [1, 2] : [0, 1]
console.log(a, c)
答案 1 :(得分:3)
答案 2 :(得分:0)
我会推荐老式的
var a, c, b = 1;
if (b > 0) {
a = 1;
c = 2;
} else {
a = 0
c = 1;
}
console.log(a + c);
如果您的具体案例允许,您也可以
var a = b > 0 ? 1 : 0;
var c = a + 1;
如果您正在寻找一种方法同时为多个变量分配多个值,那么ES6解构就是解决方案:
var {a, c} = b > 0 ? {a: 1, c: 2} : {a: 0, c: 1};
答案 3 :(得分:0)
另一个技巧是使用下面的代码块
var a,b,c;
b=1;
b > 0 ? ((a=1) && (c = 2)) : ((c = 1) && (a=0));
alert(a + " " + c);
这是Javascript中代码缩减器使用的方法。此类陈述应与预防措施一起使用。让我解释它是如何工作的
案例b = 1
条件b > 0
为true
。所以第一部分进行了评估。它有2个部分,&&
分开。这意味着两个语句都将得到评估,因为第一个语句的计算结果为true
(除非第一个状态返回false
,这是需要预防措施的地方)。为某个变量赋值会返回相同的值。所以这个测试用例通过了。
案例b = -1
条件b > 0
失败。我们再次使用&&
连同两个语句,因此两个语句再次得到评估。在这里,您看到我已将a = 0
作为第二个陈述。这是因为当我分配a = 0
时,它将返回0
以及Javascript true = 1
和false = 0
中指定的值。因此,将其作为第一个陈述将导致无价值的第二个陈述。
希望您了解情景和使用情况。
最简单的前瞻性方式是使用前面的答案中提到的逗号运算符
var a,b,c;
b=1;
b > 0 ? (a=1, c = 2) : (a = 0, c = 1);
alert(a + " " + c);
代码缩减器完全使用&&
和,
技术。
答案 4 :(得分:0)
DRY编码需要;
SELECT DISTINCT DateOfEntry FROM KFC;