Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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_Performance_Switch Statement_Set - Fatal编程技术网

Javascript 检查这些条件是否适用并执行一组任务的有效方法是什么?

Javascript 检查这些条件是否适用并执行一组任务的有效方法是什么?,javascript,performance,switch-statement,set,Javascript,Performance,Switch Statement,Set,所以我有一个javascript对象,其中包含键、值对 var listOfQuestions = { questionId: question1 questionId: question2 questionId: question3 } for (var i = 0; i < listOfQuestions.length; i++){ if (questionId == 'someValue1') { performTask1; }

所以我有一个javascript对象,其中包含键、值对

var listOfQuestions = {
    questionId: question1
    questionId: question2
    questionId: question3
}
for (var i = 0; i < listOfQuestions.length; i++){
    if (questionId == 'someValue1') {
        performTask1;
    }
    ...
    else if (questionId == 'someValue10') {
        performTask10;
    }
    else if (questionId == 'someValue11' || 'someValue12' || ... 'someValueN') {
        performThisSameTask;
    }
var列表问题={
问题编号:问题1
问题编号:问题2
问题编号:问题3
}
for(var i=0;i

我知道我可以将其更改为switch-case语句,生成一段外观更好、性能更好的代码。或者我可以创建一组这些questionId,并检查该组是否包含questionId,然后在此基础上执行任务。在这种情况下使用set的时间复杂度是多少?最好使用switch-case还是set或任何其他数据结构?任何洞察都是值得赞赏的。

取决于您是否将使用
开关或
if
,但这里更重要的是代码的可读性

如果我没有弄错你的伪代码,我会这样做:

// Your questions - list of question object.
const questions = [
    {
        id: 'someValue1',
        question: "First Question ?"
    },
    {
        id: 'someValue10',
        question: "Tenth Question ?"
    },
    {
        id: 'someValue12',
        question: "Twelfth Question ?"
    },
    {
        id: 'someValue22',
        question: "Twenty two Question ?"
    }
];

// Your tasks object.
const task = {
    first: () => {
        console.log("First task performed");
    },
    tenth: () => {
        console.log("Tenth task performed");
    },
    nth: () => {
        console.log("Nth task performed");
    },
    custom_group_task: () => {
        console.log("Custom task performed");
    },
    custom_group_task2: () => {
        console.log('Custom task2 performed');
    },
    default_one: () => {
        console.log("Default task performed");
    }

};

const getGroupTask = id => {
    // Define groups
    const group1 = ['someValue11', 'someValue12'];
    const group2 = ['someValue21', 'someValue22'];

    if(group1.includes(id)) {

        return task.custom_group_task;
    }

    else if(group2.includes(id)) {

        return task.custom_group_task2;
    }

    return false;
};

// Create task
const taskFactory = id => {

    const groupTask = getGroupTask(id);

    if(groupTask !== false) {
        return groupTask;
    }

    switch(id) {
        case 'someValue1':
            return task.first;
        case 'someValue10':
            return task.tenth;
        case 'someValue11':
        case 'someValue12':
            return task.nth;
        default:
            return task.default_one;
    }
};

// Your index
questions.forEach(e => {
    const taskResult = taskFactory(e.id)();
});

只需将其组织到具有定义良好的任务和问题的文件中并导入即可。

由于没有正确答案,此问题可能会被关闭,只会征求个人意见。请将伪伪代码(具有
.length
和重复属性的对象)转换为“real”伪代码好吧,我明白你想做什么,这对我来说很有意义。但我很困惑,我该如何在多个案例中执行相同的确切任务?我不想重复说(案例15:DotHistTask,案例16:DotHistTask,案例300:DotHistTask)。再次为错误的伪代码感到抱歉。好吧,我们可以通过添加组任务函数来解决问题,并将其注入到
taskFactory
中。编辑代码谢谢。此解决方案非常完美。性能比我之前的一堆if/else语句要好得多。学习了一种处理JS对象的新的创造性方法。