javascript - 在不同的 switch case 条件之间共享脚本

标签 javascript

条件 1 应执行任务 1、2、3、4、5 和 9。 条件 2 应执行任务 1、2、3、6、7 和 9。 条件 3 应该执行任务 8 和 9。

以下内容很容易阅读,但不会像第二个 condition1condition2 任务那样执行,因为前面的 break导致脚本退出 switch 语句。

var condition='condition1'; 
switch(condition) {
    case 'condition1':
    case 'condition2':
        console.log('do task 1');
        console.log('do task 2');
        console.log('do task 3');
        break;
    case 'condition1':
        console.log('do task 4');
        console.log('do task 5');
        break;
    case 'condition2':
        console.log('do task 6');
        console.log('do task 7');
        break;
    case 'condition3':
        console.log('do task 8');
        break;
}
console.log('do task 9');

以下内容应该可行,但并不那么容易阅读,并且随着不同条件之间共享更多功能而变得越来越困难。

var condition='condition1'; 
switch(condition) {
    case 'condition1':
    case 'condition2':
        console.log('do task 1');
        console.log('do task 2');
        console.log('do task 3');
        switch(condition) {
            case 'condition1':
                console.log('do task 4');
                console.log('do task 5');
                break;
            case 'condition2':
                console.log('do task 6');
                console.log('do task 7');
                break;
        }
        break;
    case 'condition3':
        console.log('do task 8');
        break;
}
console.log('do task 9');

同样,这应该可行,但为不同的组提供描述性名称会有问题。

var condition='condition1'; 
switch(condition) {
    case 'condition1':
        task_group_1_2_3();
        task_group_4_5();
        break;
    case 'condition2':
        task_group_1_2_3();
        task_group_6_7();
        break;
    case 'condition3':
        console.log('do task 8');
        break;
}
console.log('do task 9');

function task_group_1_2_3() {
    console.log('do task 1');
    console.log('do task 2');
    console.log('do task 3');    
}

function task_group_4_5() {
    console.log('do task 4');
    console.log('do task 5');
}

function task_group_6_7() {
    console.log('do task 6');
    console.log('do task 7');
}

创建在不同情况条件之间共享某些脚本的 switch 语句的最简洁方法是什么?

最佳答案

您可以将条件移动到对象和任务中,并使用任务迭代数组。

您可以使用正确的名称而不是数字作为键名。

var tasks = {
        1: function () { console.log(1); },
        2: function () { console.log(2); },
        3: function () { console.log(3); },
        4: function () { console.log(4); },
        5: function () { console.log(5); },
        6: function () { console.log(6); },
        7: function () { console.log(7); },
        8: function () { console.log(8); },
        9: function () { console.log(9); }
    },
    conditions = {
        1: [1, 2, 3, 4, 5, 9],
        2: [1, 2, 3, 6, 7, 9],
        3: [8, 9]
    },
    condition = 1;

conditions[condition].forEach(function (a) { tasks[a](); });
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在不同的 switch case 条件之间共享脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43068214/

相关文章:

javascript - 有没有一种方法可以在不使用 [form element].[name attribute value] 的情况下找到具有特定名称的表单的后代?

javascript - 警告 : Assign object to a variable before exporting as module default

javascript - AngularJS ng-if 中的无限循环

javascript - 地理位置共享对话框不会在每次页面刷新时显示

javascript - 存储可重用的 React+Flux 表单组件(一个组件用于具有不同字段的多个表单)

javascript - 在 Javascript 中将 RTF 转换为 HTML

javascript - 进度条仅适用于页面加载/重新加载

javascript - Ionic 框架的 Angular $cookieStore

javascript - 如何将HTML字符串发送到Django模板JavaScript?

javascript - 是否可以使用一个 if 语句的返回值作为另一个 if 语句的条件?