我们可以简化这个简写吗?

时间:2019-07-11 20:08:56

标签: javascript

我们可以进一步简化一下吗?

flag ? itemFailed(item, $content, "#ln", "data1") :
       itemFailed(item, $content, "#in", "data2")

5 个答案:

答案 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);