数组减少以下代码中发生的功能

时间:2016-01-18 09:25:04

标签: angularjs typescript

您好我正在研究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);
}}

1 个答案:

答案 0 :(得分:2)

如果您了解reduce方法的工作原理,那么您就知道回调中的部分应该返回两个值的总和,即增量 - 如果任务是undone(添加1)或添加没有(零)如果任务完成,done等于真。

这就是这条线的作用

count + +!todo.done

部分+!todo.done只是一个令人困惑的类型转换,可以重写为

count + Number(!Boolean(task.done))

现在应该很清楚,因为布局值的 toNumber 转换遵循简单规则(ECMAScript spec):1表示true,0表示false。