Javascript 检查这些条件是否适用并执行一组任务的有效方法是什么?
所以我有一个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; }
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对象的新的创造性方法。