Javascript 具有多个结果的三元语句

Javascript 具有多个结果的三元语句,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,我有一个函数,在其中我传递一个查询参数,它是一个字符串。如果查询不是空的,该函数将使用true布尔值调用toggleList,否则将使用false调用toggleList 我还有一个接受数组的setMovies函数。如果查询不是空的,我想做这个函数 query ? toggleList(true) : toggleList(false); if (query) { setMovies([...movies]); } 但我不能这样做: query ? (toggleList(true),

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

我还有一个接受数组的setMovies函数。如果查询不是空的,我想做这个函数

query ? toggleList(true) : toggleList(false);

if (query) { 
  setMovies([...movies]);
}
但我不能这样做:

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

在三元语句的真值部分调用两个函数是不可能的,因为这样我实现了太多的逻辑,我应该使用一个正常的if/else语句,或者我遗漏了什么,使得这成为可能

如果调用的第一个函数有一个错误的返回值ex undefined,您可以使用| |运算符触发这两个函数

query ? toggleList(true) || setMovies([...movies]) : toggleList(false);
如果这是真的,你会相应地使用&&

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

函数f1{ console.logf1; } 功能f2{ console.logf2; } 功能f3{ console.logf3; } 符合事实的f1 | | f2:f3;//记录f1和f2
错误的f1 | | f2:f3;//日志f3如果调用的第一个函数的返回值为false ex undefined,则可以使用| |运算符触发这两个函数

query ? toggleList(true) || setMovies([...movies]) : toggleList(false);
如果这是真的,你会相应地使用&&

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

函数f1{ console.logf1; } 功能f2{ console.logf2; } 功能f3{ console.logf3; } 符合事实的f1 | | f2:f3;//记录f1和f2
错误的f1 | | f2:f3;//日志f3三元运算符用于简单的单行if/else情况。
如果您想实现更复杂的逻辑,如您的情况,请使用标准的If/else。

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

您可以使用匿名函数调用

const func1=a=>console.log'1',a const func2=b=>console.log'2',b 符合事实的 ? => { func1'a' 功能2'b' }
:func2'c'您可以使用匿名函数调用

const func1=a=>console.log'1',a const func2=b=>console.log'2',b 符合事实的 ? => { func1'a' 功能2'b' }
:func2'c'请采取干净的方法

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

只要采取干净的方法

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

这回答了你的问题吗?由于toggleList的输入仅基于查询的值,您可以尝试将其简化为toggleListBooleanquery,并在不考虑查询值的情况下触发它。这是否回答了您的问题?由于toggleList的输入仅基于查询的值,因此您可以尝试将其简化为toggleListBooleanquery并触发它,而不管查询值如何。下面的示例给出:预期的是赋值或函数调用,而不是表达式。这也是我的例子。您的第一个示例确实有效,但可读性远不如norma if/else语句,但感谢您展示了它的可行性。@PeterBoomsma谈到下面的示例,我想知道您使用了什么js环境?我在浏览器控制台和node下运行,仍然看不到在TypeScript中运行它时有任何错误,所以它可能更严格了一点。@peterboomma如果这只是一个警告,那么可能你的linting规则是严格的,您可以考虑对下面的示例给出的行进行ignore lint check:预期是赋值或函数调用,而不是看到表达式。这也是我的例子。您的第一个示例确实有效,但可读性远不如norma if/else语句,但感谢您展示了它的可行性。@PeterBoomsma谈到下面的示例,我想知道您使用了什么js环境?我在浏览器控制台中运行了node,但仍然看不到任何错误在TypeScript中运行它,所以它可能更严格了一点。@peterboomma如果这只是一个警告,那么可能您的linting规则很严格,您可以考虑忽略该行的lint检查您认为该查询如何?=>{toggleListtrue;setMovies[…movies]}:toggleListfalse?如果你知道三元语句,这看起来很简单,对吗?@PeterBoomsma,三元语句返回一个与你的代码无关的表达式。它不容易理解,直接称为iife,这是不需要的。您对这个查询有何看法?=>{toggleListtrue;setMovies[…movies]}:toggleListfalse?如果你知道三元语句,这看起来很简单,对吗?@PeterBoomsma,三元语句返回一个与你的代码无关的表达式。它不容易理解,直接被称为iLife,这是不需要的。