JavaScript - reduce 示例的解释
JavaScript - Explanation of reduce example
这是我在 Whosebug 上的第一个问题(如果我做错了什么 - 抱歉!)
我有一个reducer函数,是我老师帮助我的,我真的能理解它的意思。
这是一个待办事项应用程序,我有一个按钮。当按下按钮时,待办事项列表中的所有项目都应标记为已完成。当我再次按下按钮时,所有项目都应该未完成。
我得到了大部分代码。我无法理解的一个部分是项目数组 !store.items.find
之前的解释标记。
如果有人能给出解释,我将不胜感激!
如果您需要我分享更多代码,也请告诉我。
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
}
},
Array#find
将 return 匹配项目的数组,否则 returns undefined
.
因此,如果有一些未完成的待办事项 find
将 return 一个数组并且取反该数组将导致 false
,如果没有未完成的待办事项,它将 return ] undefined
并否定 undefined
将导致 true
.
考虑以下代码片段:
const todo = [
{ task: "Exercise", isComplete: true },
{ task: "Buy Grocery", isComplete: false },
];
// There is one incomplete todo in the above todo array
const resultFromFind = todo.find(t => !t.isComplete);
console.log(resultFromFind); // { task: 'Buy Grocery', isComplete: false }
const allComplete = !resultFromFind
console.log(allComplete) // false
const todo = [
{ task: "Exercise", isComplete: true },
{ task: "Buy Grocery", isComplete: true },
];
// There is no incomplete todo in the above todo array
const resultFromFind = todo.find(t => !t.isComplete);
console.log(resultFromFind); // undefined
const allComplete = !resultFromFind
console.log(allComplete) // true
嗯
store.items.find(todo => !todo.isComplete)
表示查找任何尚未完成的项目,如果没有这样的项目,则 find 将 return 未定义,因此
!store.items.find(todo => !todo.isComplete)
意味着如果有一个项目没有完成,那么这将是错误的,如果所有项目都完成,那么 find 将 return 未定义,并且整个表达式将为真
表达相同逻辑的更好方法是
const areAllTasksCompleted = store.items.every(todo => todo.isComplete)
const areAllTasksCompleted = !store.items.find(todo => !todo.isComplete)
store.items.find
return 是匹配谓词回调条件的第一项。
todo => !todo.isComplete
是你的谓词回调,它传递一个参数(迭代中的当前项目)和 returns true
如果项目不完整(或 false
如果完成的话)。
因此,此表达式将return数组中第一个未完成元素的值。
整个表达式前的!
取反表达式的结果。在 JavaScript 中,任何对象值都将被强制转换为 true
,而 null
或 undefined
值将被强制转换为 false
,因此如果表达式找到匹配谓词的值,你的const将被分配给false
,否则它将是true
.
这是我在 Whosebug 上的第一个问题(如果我做错了什么 - 抱歉!)
我有一个reducer函数,是我老师帮助我的,我真的能理解它的意思。 这是一个待办事项应用程序,我有一个按钮。当按下按钮时,待办事项列表中的所有项目都应标记为已完成。当我再次按下按钮时,所有项目都应该未完成。
我得到了大部分代码。我无法理解的一个部分是项目数组 !store.items.find
之前的解释标记。
如果有人能给出解释,我将不胜感激!
如果您需要我分享更多代码,也请告诉我。
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
}
},
Array#find
将 return 匹配项目的数组,否则 returns undefined
.
因此,如果有一些未完成的待办事项 find
将 return 一个数组并且取反该数组将导致 false
,如果没有未完成的待办事项,它将 return ] undefined
并否定 undefined
将导致 true
.
考虑以下代码片段:
const todo = [
{ task: "Exercise", isComplete: true },
{ task: "Buy Grocery", isComplete: false },
];
// There is one incomplete todo in the above todo array
const resultFromFind = todo.find(t => !t.isComplete);
console.log(resultFromFind); // { task: 'Buy Grocery', isComplete: false }
const allComplete = !resultFromFind
console.log(allComplete) // false
const todo = [
{ task: "Exercise", isComplete: true },
{ task: "Buy Grocery", isComplete: true },
];
// There is no incomplete todo in the above todo array
const resultFromFind = todo.find(t => !t.isComplete);
console.log(resultFromFind); // undefined
const allComplete = !resultFromFind
console.log(allComplete) // true
嗯
store.items.find(todo => !todo.isComplete)
表示查找任何尚未完成的项目,如果没有这样的项目,则 find 将 return 未定义,因此
!store.items.find(todo => !todo.isComplete)
意味着如果有一个项目没有完成,那么这将是错误的,如果所有项目都完成,那么 find 将 return 未定义,并且整个表达式将为真
表达相同逻辑的更好方法是
const areAllTasksCompleted = store.items.every(todo => todo.isComplete)
const areAllTasksCompleted = !store.items.find(todo => !todo.isComplete)
store.items.find
return 是匹配谓词回调条件的第一项。
todo => !todo.isComplete
是你的谓词回调,它传递一个参数(迭代中的当前项目)和 returns true
如果项目不完整(或 false
如果完成的话)。
因此,此表达式将return数组中第一个未完成元素的值。
整个表达式前的!
取反表达式的结果。在 JavaScript 中,任何对象值都将被强制转换为 true
,而 null
或 undefined
值将被强制转换为 false
,因此如果表达式找到匹配谓词的值,你的const将被分配给false
,否则它将是true
.