#javascript #arrays #reactjs #react-hooks
Вопрос:
Всем привет, пока не поздно и не поздно, я не могу работать .
Мне нужно обновить каждый флажок, когда это правда или ложь (массив задач-флажок в интерфейсе)
Data seeds
const datas = [
{
id: 10,
name: job01,
tasks: [
{ name: "morning", value: false },
{ name: "afternoon", value: true },
{ name: "sunset", value: false },
{ name: "night", value: true },
],
completed: false
}];
следующий код для обновления данных при нажатии одного флажка:
const [todos, setTodos] = useState(datas)
const toggleTask = taskId => {
const updateTodos = todos.forEach(to => {
to.tasks.forEach(task => {
if (taskId === to.name)
console.log('update datas: ', { ...task, value: !task.value})
}
})
})console.log('Result: ', updateTodos ) };//only show undefined
Thnz для чтения.
Ответ №1:
forEach
ничего не возвращает, возможно, вам захочется сначала сопоставить массив, а затем отфильтровать элементы:
// get a list of the tasks that you need to update
const needUpdateTodos = todos.flatMap(
to => to.tasks.filter(task => taskId === to.name)
);
// for each task that you need to update, change the value to the opposite
const updatedTodos = needUpdateTodos.map(el => {
task.value = !task.value;
console.log('update datas: ', task)
return task
})
// show resulting tasks updated
console.log('Result: ', updatedTodos )