我是一个真正的初学者,并且是JavaScript的狂热者。我需要帮助。我的以下代码有问题:
if (newTask.done === false) {
newTask = doneArray.push({
id: doneArray.length,
description: clickedTask.textContent,
done: false
});
} else {
removeTask = doneArray.splice(newTask.id, 1);
};
我需要检查我的对象是否在完成的[[key中具有false或true value。当新任务为false时,我想将其push放入我的Array,如果不是,则将其从我的Array remove中删除。我不知道如何获取id的值并在if statement中使用它。然后将对象中的该值更改为true。我不知道,也许有更好的方法可以使它工作而不删除整个代码。这是完整的代码:codepen.io
if (newTask.done === false) {
newTask = doneArray.push({
id: doneArray.length,
description: clickedTask.textContent,
done: false
});
} else {
for(let i = 0; i < doneArray.length; ++i){
if(doneArray[i].id == newTask.id)
removeTask = doneArray.splice(i, 1);
break;
}
} };
但是,每次从数组中删除一个对象时,其长度都会变小,从而导致多个具有相同ID的对象。这意味着您将不得不决定执行删除优先操作或删除阵列的所有操作。除非是有意为之,否则我会使用其他ID(例如会不断增加的计数器)。编辑-也可能是长度从1开始,数组索引从0开始。因此,如果删除了错误的数字,则必须考虑到这一点。
// Here is an array containing 3 new tasks
const allTasks = [{
id: 0,
description: 'desc 1',
done: true
}, {
id: 1,
description: 'desc 2',
done: false
}, {
id: 2,
description: 'desc 3',
done: true
}];
// Here is an function to get a new array of only NOT DONE tasks
// We achieve this by simply using Array.prototype.filter method
const filterDoneTasks = arr => arr.filter(task => !task.done);
const pendingTasks = filterDoneTasks(allTasks);
console.log(pendingTasks);