【问题标题】:Need to refactor to if statements via ternary operator需要通过三元运算符重构 if 语句
【发布时间】:2017-10-26 08:02:40
【问题描述】:

大家好,第一次发帖,需要最好的方法或解决方案来重构我认为丑陋的东西,通常没有足够的时间花在上面。

if(textInput.length > 0) {
    href = href + '&' + jQuery.param({ text: textInput.val()});
}

if(symbolDropdown.length > 0) {
    href = href + '&' + jQuery.param({ symbol: symbolDropdown.val()});
}

任何帮助将非常感谢。

【问题讨论】:

  • 它很好......其他一切都会让它变得非常难看......
  • textInput 是节点列表吗?我只是想知道 textInput.length 是什么。
  • 这没有错。为什么你认为三元方法会更好?

标签: javascript jquery ternary-operator


【解决方案1】:

你可以这样做:

href += (textInput.length?
            `&${jQuery.param({ text: textInput.val()})}`:''
        ) + (symbolDropdown.length?
            `&${jQuery.param({symbol: symbolDropdown.val()})}`:''
        )

老实说,如果我要重构这段代码,我会这样做:

const params = [], escPush = i => params.push(jQuery.param(i))

textInput.length && escPush({text: textInput.val()})
symbolDropdown.length && escPush({symbol: symbolDropdown.val()}))

params.length && (href += '&' + params.join('&'))

【讨论】:

    【解决方案2】:

    您可以使用数据创建一个数组并映射jQuery.param。稍后加入&;

    href += '&' + []
        .concat(textInput.val() || [], symbolDropdown.val() || [])
        .map(a => jQuery.param({ symbol: a }))
        .join('&');
    

    【讨论】:

    • 第一个值在键text
    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 2018-12-26
    • 1970-01-01
    • 2011-06-10
    • 2011-05-10
    • 2018-12-08
    • 2017-11-19
    • 2010-12-03
    相关资源
    最近更新 更多