该函数的目的是在双击任务时切换任务对象的提醒属性。
我试图创建其他类似的函数来取代教程代码,如不使用map,我会使用for循环。但是,如果尝试在映射中使用if-else条件而不是三元操作符,则任务的状态最终将是未定义的。有人能告诉我我的代码有什么问题吗?
教程代码(Working)
setTasks(tasks.map((task) =>
task.id === id ? { ... task, reminder : !task.reminder} : task
));
For Loop Variation (Working)
let tempTasks = [];
for(let i = 0; i < tasks.length; i ++){
if(tasks[i].id == id){
let newObj = {};
newObj['id'] = tasks[i].id;
newObj['text'] = tasks[i].text;
newObj['day'] = tasks[i].day;
if(tasks[i].reminder === true){
newObj['reminder'] = false;
}
else{
newObj['reminder'] = true;
}
tempTasks.push(newObj);
}
else{
tempTasks.push(tasks[i]);
}
}
setTasks(tempTasks);
使用If Else (Not Working)映射变异
setTasks(tasks.map((task) => {
if(task.id === id){
task.id = task.id;
task.text = task.text;
task.reminder = true;
}
else{
task = task;
}
} ));
需要返回对象
setTasks(tasks.map((task) => {
if(task.id === id){
task.id = task.id;
task.text = task.text;
task.reminder = true;
}
return task
}