具有多个结果的三元语句



我有一个函数,在其中我传递一个query参数,该参数是一个字符串。如果查询不为空,则函数使用true布尔值调用toggleList,否则使用false。

我还有一个接受数组的setMovies函数。如果查询不为空,我想执行此函数。

query ? toggleList(true) : toggleList(false);
if (query) { 
setMovies([...movies]);
}

但我不能这样做:

query ? (toggleList(true), setMovies([...movies])) : toggleList(false);

是不是不可能在三元语句的真值部分调用2个函数,因为这样我实现了太多的逻辑,我应该只使用一个普通的if/else语句,或者我缺少了一些东西,这使得成为可能

采取一种干净的方法。

toggleList(!!query);               // if query is already boolean take it without !!
if (query) setMovies([...movies]);

如果调用的第一个函数有一个未定义的false返回值,您可以使用||运算符来触发它们两个

query ? toggleList(true) || setMovies([...movies]) : toggleList(false);

如果这是真的,你会相应地使用&

query ? toggleList(true) && setMovies([...movies]) : toggleList(false);

示例:

function f1(){
console.log("f1");
}
function f2(){
console.log("f2");
}
function f3(){
console.log("f3");
}
true ? f1() || f2() : f3(); // logs both f1 and f2
false ? f1() || f2() : f3(); // logs f3

三元运算符用于简单的单行if/else情况。如果您想实现更复杂的逻辑,比如在您的案例中,请使用If/else标准。

您可以使用匿名函数调用

const func1 = a => console.log('1', a)
const func2 = b => console.log('2', b)
true
? (() => {
func1('a')
func2('b')
})()
: func2('c')

const func1 = a => console.log('1', a)
const func2 = b => console.log('2', b)
true ? (func1(1), func2(2)) : func2(2)

最新更新