我们可以进一步简化一下吗?
flag ? itemFailed(item, $content, "#ln", "data1") :
itemFailed(item, $content, "#in", "data2")
答案 0 :(得分:7)
当然,只需将条件放在参数中:
itemFailed(item, $content, flag?"#ln":"#in", flag?"data1":"data2")
或者,如果只想评估一次条件,则可能要使用传播参数语法:
itemFailed(item, $content, ... flag?["#ln", "data1"]:["#in", "data2"])
当然,这些都不是很可读的。尽管您可以使用更好的缩进(例如@jakemingolla的答案),但是原始表达式要简单得多,并且没有太多重复。但是,如果您确实想避免这种情况,例如当实际参数更大时,我建议使用辅助变量:
const [hash, data] = flag // use descriptive names
? ["#ln", "data1"]
: ["#in", "data2"];
itemFailed(item, $content, hash, data)
答案 1 :(得分:3)
也许我没有完全理解这个问题,但是不,我不相信您可以再简化它。您只有一个三元表达式,并且有一个表达式作为输出。
我想,您可以使用用于参数选择的三进制创建单个函数调用,例如:
itemFailed(
item,
$content,
flag ? '#ln' : '#in',
flag ? 'data1' : 'data2'
);
但是我认为那没有更好。
别忘了简单性和长度不是一回事。
答案 2 :(得分:2)
您可以使用传播语法执行以下操作:
function itemFailed(a, b, c, d) { console.log(a, b, c, d) }
let flag = true
let item = 'i'
let $content = 'abc'
itemFailed(item, $content, ...flag ? ["#ln", "data1"] : ["#in", "data2"])
flag = false
itemFailed(item, $content, ...flag ? ["#ln", "data1"] : ["#in", "data2"])
答案 3 :(得分:0)
itemFailed(item, $content, "#ln", flag ? "data1" : "data2")
不能比这短得多。
答案 4 :(得分:0)
您实际上可以将函数争论存储在变量中,然后将变量传递给函数,像这样
var args = [1,2,3,4,5,6];
function oi(a,b,c,d,e,f){
return {a,b,c,d,e,f};
}
oi(...args);