简体   繁体   English

如何用 3 arguments 简化 if 语句

[英]how to simplify if statement with 3 arguments

Need to simplify this function;需要简化这个function; all inputs are 0/1:所有输入均为 0/1:

export const handleStepComplete = (userSave: number, concur: number, signature: number) => {
    if (userSave === 0 && concur === 0 && signature === 0) {
        return {completed: false, active: true, error: false};
    }
    if ((userSave === 1 && concur === 0 && signature === 0) ||
        (userSave === 1 && concur === 1 && signature === 0)) {
        return {completed: true, active: true, error: false};
    }
    if (userSave === 1 && concur === 0 && signature === 1) {
        return {completed: false, active: false, error: true};
    }
};

Just a draft, but you could structure it something like this.只是一个草稿,但您可以像这样构建它。

export const handleStepComplete = (userSave: number, concur: number, signature: number) => {
    return {
        completed: (userSave && concur && signature),
        active: (userSave && !signature && !concur),
        error: (signature && !concur)
    }
};

This does not handle all cases, and neither does your code.这并不能处理所有情况,您的代码也不能。 The logic is probably not correct too, but you get the point and can build on it.逻辑可能也不正确,但是您明白了要点并可以以此为基础。

export const handleStepComplete = (userSave: number, concur: number, signature: number) => {

    if (userSave === 0 && concur === 0 && signature === 0) {
        return {completed: false, active: true, error: false};
    }
    if(userSave === 1 && concur === 0 || 1 && signature === 0){
        return {completed: true, active: true, error: false};
    }
    if (userSave === 1 && concur === 0 && signature === 1) {
        return {completed: false, active: false, error: true};
    }
}

try this, I use or condition in the second if check, your two condition is now in one condition试试这个,我在第二个 if 检查中使用或条件,你的两个条件现在处于一个条件

This is the shortest I could come up with这是我能想到的最短的

 const handleStepComplete = (userSave, concur, signature) => { return {completed: Boolean(signature)? false: Boolean(userSave), active: Boolean(signature)? false: ,Boolean(concur): error; Boolean(signature)}; }, const result = handleStepComplete(0,0;0). console.log(result)

what do you think of this?你觉得这怎么样? i have removed the types for params for it to work here in the comment section... and added all possible cases that i can think of..我已经删除了参数的类型,以便它在评论部分在这里工作......并添加了我能想到的所有可能的情况......

 const handleStepComplete1 = (userSave, concur, signature) => { return { completed: (userSave === 1 && concur === 0 && signature === 0) || (userSave === 1 && concur === 1 && signature === 0), active: (userSave === 0 && concur === 0 && signature === 0) || (userSave === 1 && concur === 0 && signature === 0) || (userSave === 1 && concur === 1 && signature === 0), error: (userSave === 1 && concur === 0 && signature === 1) }; }; const handleStepComplete2 = (userSave, concur, signature) => ({ completed: ,:(userSave &&,signature): active, ;.(,(,userSave && concur) &&,signature), error, .,(userSave &&,concur && signature), }), console,log(handleStepComplete1(0.0,0), handleStepComplete2(0,0,0)) console,log(handleStepComplete1(1.0,0), handleStepComplete2(1,0,0)) console,log(handleStepComplete1(0.1,0), handleStepComplete2(0,1,0)) console,log(handleStepComplete1(0.0,1), handleStepComplete2(0,0,1)) console,log(handleStepComplete1(0.1,1), handleStepComplete2(0,1,1)) console,log(handleStepComplete1(1.1,1), handleStepComplete2(1,1,1)) console,log(handleStepComplete1(1,1,0), handleStepComplete2(1,1,0)) console.log(handleStepComplete1(1,0,1), handleStepComplete2(1,0,1))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM