您好我正在研究https://angular.io/
中的Angular 2.0源代码示例我遇到了以下代码。功能"剩余"实质上获取todos数组中的元素数量,其中done为false。它工作正常,我只是想了解reduce函数中发生了什么。我对reduce函数如何工作有基本的了解,但是无法理解这里的语法,特别是count+ +!todo.done
。我是打字稿的新手。
export class TodoApp{
todos: Todo[] =[
{text:"learn angular",done:true},
{text:"build angular app",done:false}
];
get remaining(){
return this.todos.reduce((count:number,todo:Todo) => count+ +!todo.done, 0);
}}
答案 0 :(得分:2)
如果您了解reduce方法的工作原理,那么您就知道回调中的部分应该返回两个值的总和,即增量 - 如果任务是undone
(添加1
)或添加没有(零)如果任务完成,done
等于真。
这就是这条线的作用
count + +!todo.done
部分+!todo.done
只是一个令人困惑的类型转换,可以重写为
count + Number(!Boolean(task.done))
现在应该很清楚,因为布局值的 toNumber 转换遵循简单规则(ECMAScript spec):1表示true,0表示false。