用更短的方式替换下面的 if, else-if, else

Replace the below if, else-if, else in shorter way

我会在 javascript 中以更短的方式替换下面的 if, else-if, else 。我如何使用三元运算符或过滤器来做到这一点?有人可以建议吗?我添加了以下三元组但不知道如何包含 else 条件?

Then('I type {string} in {string} field', (textval, textboxname) => {
    if (textboxname == "Trade Price") {
      cy.get('#DetailsContainer .allowDigits.tradePrice-js').clear().type(parseInt(textval));
    } else if (textboxname == "Email" || textboxname == "Work Phone" || textboxname == "Mobile Phone"|| textboxname == "Home Phone") {
      cy.get('#content_container').parent().find('.fieldHeader').contains(textboxname)
        .next().find('input')
        .type(textval, { force: true })
    } else {
      cy.get('#content_container').parent().find('.fieldHeader').contains(textboxname)
        .next()
        .type(textval, { force: true })
    }
});

//三元运算符

function example(…) {
    return textboxname ? "Trade Price"
         : textboxname ? "Mobile"
         : textboxname ? "Work Phone"
         : textboxname? "Home Phone"
         : value4;
}

您似乎没有正确使用三元运算符。为了将您的第一段代码重构为三元运算符,您可以这样做:

return (textboxname === "Trade Price" ? {...code to be executed for condition}
         : (textboxname == "Email" || textboxname == "Work Phone"
         || textboxname == "Mobile Phone"|| textboxname == "Home Phone") 
         ? {...code to be executed for condition} 
         : {..final else condition}
       );

BUT,在这些用例中,使用 switch-case 更简洁,更可取,因为您只关心一个变量的值并且需要相应地执行操作:

switch(textboxname) {
 case "Trade Price":
        cy.get('#DetailsContainer .allowDigits.tradePrice-js').clear().type(parseInt(textval));
        break;
 
//perform same code for these 4 cases
 case "Email":
 case "Work Phone":
 case "Mobile Phone":
 case "Home Phone":
        cy.get('#content_container').parent().find('.fieldHeader').contains(textboxname)
        .next().find('input')
        .type(textval, { force: true });
        break;

//final else condition
 default:
        cy.get('#content_container').parent().find('.fieldHeader').contains(textboxname)
        .next()
        .type(textval, { force: true });

}

比为这类事情编写三元运算符要干净得多,你明白为什么了。