Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript改进代码切换语句_Javascript_Optimization_Switch Statement - Fatal编程技术网

Javascript改进代码切换语句

Javascript改进代码切换语句,javascript,optimization,switch-statement,Javascript,Optimization,Switch Statement,我试图通过减少重复次数来改进代码 在这里的代码中,我想避免这个切换步骤,因为除了比较运算符==和之外,不同的情况是相同的== function Test(step, nb_change, name, value, previous_name){ switch (step) { case 1: for (var i = 0; i < nb_change; i++) { if (name === previous_

我试图通过减少重复次数来改进代码

在这里的代码中,我想避免这个切换步骤,因为除了比较运算符
==
之外,不同的情况是相同的==

function Test(step, nb_change, name, value, previous_name){
    switch (step) {
        case 1:
            for (var i = 0; i < nb_change; i++) {
                if (name === previous_name[nb_change-1-i][1] && value === 'nd') {
                    To_change(i);
                    return true;
                }
            }
            return false;
        case 2:
            for (var i = 0; i < nb_change; i++) {
                if (name === previous_name[nb_change-1-i][1] && value !== 'nd') {
                    To_change(i);
                    return true;
                }
             }
             return false;
        case 3:
            for (var i = 0; i < nb_change; i++) {
                if (select_name !== previous_name[nb_change-1-i][1] && value !== 'nd') {
                    To_change(i);
                    return true;
                }
            }
            return false;
        default:
            alert('ERROR');
            break;
    }
}
功能测试(步骤、nb\u更改、名称、值、上一个\u名称){
开关(步骤){
案例1:
对于(变量i=0;i
请毫不犹豫地提出一个可以帮助我的解决方案

这只是一个例子,从很多! 当我认为我的代码本可以写得更好时,我如何找到帮助来改进代码


谢谢您的帮助。

您可以使用一个函数来接收一个参数,该参数描述如何处理相等性。在这里,我们可以利用按位操作来给出所需的描述

function Test(step, nb_change, name, value, previous_name) {
    const BOTH_EQ = 3;
    const NAME_EQ = 2;
    const NO_EQ = 0;

    switch (step) {
        case 1:
            return myFunc(BOTH_EQ, nb_change, name, previous_name, value);
        case 2:         
            return myFunc(NAME_EQ, nb_change, name, previous_name, value);
        case 3:          
            return myFunc(NO_EQ, nb_change, name, previous_name, value)
        default:
            alert('ERROR');
            break;
    }
}

function myFunc(compare, nb_change, name, previous_name, value) {
    for (var i = 0; i < nb_change; i++) {
        const first_eq = (name === previous_name[nb_change-1-i][1]) << 1;
        const second_eq = value === 'nd';

        if (compare === (first_eq | second_eq)) {
            To_change(i);
            return true;
        }
    }
    return false;
}

也许是这样的

功能测试(步骤、nb\u更改、名称、值、上一个\u名称){
var结果=假;
对于(变量i=0;i
功能测试(步骤、nb更改、名称、值、以前的名称){
var valueCheck,
姓名核对;
开关(步骤){
案例1:
valueCheck=值=='nd';
名称检查=名称===以前的名称[nb_change-1-i][1];
案例2:
valueCheck=value!==nd');
名称检查=名称===以前的名称[nb_change-1-i][1];
案例3:
valueCheck=值!=='nd';
名称检查=选择名称!==以前的名称[nb\U change-1-i][1];
违约:
警报(“错误”);
打破
}
对于(变量i=0;i
查看每个箱子的主体。找出它们的相同点和不同点。使相似的部分成为函数的主体,并使不同的部分成为函数的参数。这是泛化代码的基本方法。@j08691我不知道这是一件事,酷。@JamesThorpe:你说得对,我错过了。将更新。伟大的按位操作!你的例子很好,只是我不需要switch语句,我可以直接使用const equality来代替step变量。@jardindeden:是的,如果你可以更改
step
,那绝对是正确的方法。
true, true   == ((true << 1)  | true)  == ((1 << 1) | 1) == (0010 | 0001) == 3
true, false  == ((true << 1)  | false) == ((1 << 1) | 0) == (0010 | 0000) == 2
false, true  == ((false << 1) | true)  == ((0 << 1) | 1) == (0000 | 0001) == 1
false, false == ((false << 1) | false) == ((0 << 1) | 0) == (0000 | 0000) == 0
function Test(step, nb_change, name, value, previous_name){
    var valueCheck,
        nameCheck;

    switch (step) {
        case 1:
          valueCheck = value === 'nd';
          nameCheck = name === previous_name[nb_change-1-i][1];
        case 2:
          valueCheck = value !== 'nd');
          nameCheck = name === previous_name[nb_change-1-i][1];
        case 3:
          valueCheck = value !== 'nd';
          nameCheck = select_name !== previous_name[nb_change-1-i][1];
        default:
            alert('ERROR');
            break;
    }

    for (var i = 0; i < nb_change; i++) {
        if (nameCheck && valueCheck) {
            To_change(i);
            return true;
        }
    }
    return false;
}