JavaScript-reduce示例的解释
这是我关于StackOverflow的第一个问题,如果我做错了什么-对不起 在老师的帮助下,我有一个减速机函数,我能真正理解它的意思。 这是一个我有按钮的待办事项应用程序。按下按钮时,todo列表中的所有项目都应标记为已完成。当我再次按下按钮时,所有项目都应处于完成状态 我得到了大部分代码。有一部分我无法用图形表示我的想法,那就是项目数组前的解释标记!store.items.find。 如果有人能给我一个解释,我将不胜感激! 如果您需要我共享更多代码,也请告诉我JavaScript-reduce示例的解释,javascript,arrays,reactjs,redux,immutability,Javascript,Arrays,Reactjs,Redux,Immutability,这是我关于StackOverflow的第一个问题,如果我做错了什么-对不起 在老师的帮助下,我有一个减速机函数,我能真正理解它的意思。 这是一个我有按钮的待办事项应用程序。按下按钮时,todo列表中的所有项目都应标记为已完成。当我再次按下按钮时,所有项目都应处于完成状态 我得到了大部分代码。有一部分我无法用图形表示我的想法,那就是项目数组前的解释标记!store.items.find。 如果有人能给我一个解释,我将不胜感激! 如果您需要我共享更多代码,也请告诉我 completeAllTodo:
completeAllTodo: (store, action) => {
const areAllTasksCompleted = !store.items.find(todo => !todo.isComplete)
if (areAllTasksCompleted) {
const completedItems = store.items.map(todo => {
return {
...todo,
isComplete: false
}
})
store.items = completedItems
} else {
const completedItems = store.items.map(todo => {
return {
...todo,
isComplete: true
}
})
store.items = completedItems
}
},
Arrayfind将返回匹配项的数组(如果有),否则将返回未定义项。
因此,如果有一些不完整的TODO find将返回一个数组,对该数组求反将导致false,如果没有不完整的TODO,它将返回undefined,对undefined求反将导致true
考虑下面的代码片段:
常数todo=[
{task:Exercise,isComplete:true},
{任务:购买杂货,isComplete:false},
];
//上述todo数组中有一个不完整的todo
const resultFromFind=todo.findt=>!t、 不完全;
console.logresultFromFind;//{任务:“购买杂货”,isComplete:false}
常数全部完成=!结果发现
console.logallComplete//falseArrayfind将返回匹配项的数组,否则将返回未定义项。
因此,如果有一些不完整的TODO find将返回一个数组,对该数组求反将导致false,如果没有不完整的TODO,它将返回undefined,对undefined求反将导致true
考虑下面的代码片段:
常数todo=[
{task:Exercise,isComplete:true},
{任务:购买杂货,isComplete:false},
];
//上述todo数组中有一个不完整的todo
const resultFromFind=todo.findt=>!t、 不完全;
console.logresultFromFind;//{任务:“购买杂货”,isComplete:false}
常数全部完成=!结果发现
console.logallComplete//falsewell
意味着查找任何尚未完成的项目,如果没有此类项目,则find将返回undefined,依此类推
!store.items.find(todo => !todo.isComplete)
意味着如果有一个项目未完成,则该项为false。如果所有项目都已完成,则find将返回undefined,且整个表达式为true
表达相同逻辑的更好方法是
const areAllTasksCompleted = store.items.every(todo => todo.isComplete)
嗯
意味着查找任何尚未完成的项目,如果没有此类项目,则find将返回undefined,依此类推
!store.items.find(todo => !todo.isComplete)
意味着如果有一个项目未完成,则该项为false。如果所有项目都已完成,则find将返回undefined,且整个表达式为true
表达相同逻辑的更好方法是
const areAllTasksCompleted = store.items.every(todo => todo.isComplete)
返回与谓词回调条件匹配的第一个项
todo=>!todo.isComplete是谓词回调,它在迭代中向当前项传递一个参数,如果项不完整,则返回true;如果项完整,则返回false
因此,此表达式将返回数组中未完成的第一个元素的值
这个!在整个表达式否定表达式的结果之前。在JavaScript中,任何对象值都将强制为true,null或未定义的值将强制为false,因此如果表达式找到与谓词匹配的值,则const将被指定为false,否则将为true
返回与谓词回调条件匹配的第一个项
todo=>!todo.isComplete是谓词回调,它在迭代中向当前项传递一个参数,如果项不完整,则返回true;如果项完整,则返回false
因此,此表达式将返回数组中未完成的第一个元素的值
这个!在整个表达式否定表达式的结果之前。在JavaScript中,任何对象值都将强制为true,null或未定义的值将强制为false,因此如果表达式找到与谓词匹配的值,则const将被指定为false,否则将为true。它强制转换!有些val是布尔值,所以如果find返回一个falsy值,结果将是false,它有两个!运算符并将对象转换为布尔值。这是非常令人困惑的。像这样使用:store.items.everytodo=>todo.isCompleteT强制转换!有些val是布尔值,所以如果find返回一个falsy值,结果将是false,它有两个!运算符并将对象转换为布尔值。这是非常令人困惑的。像这样使用:store.items.everytodo=>todo.isComplete