angularjs - Chức năng Reduce của mảng đang xảy ra trong đoạn mã sau
Chào, tôi đang tìm hiểu các ví dụ mã nguồn Angular 2.0 trên https://angular.io/
Tôi tình cờ gặp đoạn mã sau. Hàm "remaining" về cơ bản lấy số lượng phần tử trong mảng todos mà done là false. Nó hoạt động tốt, tôi chỉ muốn hiểu những gì đang xảy ra trong hàm reduce. Tôi có ý tưởng cơ bản về cách hàm reduce hoạt động, nhưng không hiểu cú pháp ở đây, đặc biệt là count+ +!todo.done. Tôi mới làm quen với typescript.
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);
}}
Câu trả lời #1
Nếu bạn hiểu cách phương thức reduce hoạt động, thì bạn biết rằng phần trong callback dự kiến sẽ trả về tổng của hai giá trị, cụ thể là, increment - nếu nhiệm vụ là undone (thêm 1) hoặc không thêm gì (bằng không) nếu nhiệm vụ đã hoàn thành, done bằng true.
Đây chính xác là những gì dòng này thực hiện
count + +!todo.done
Phần +!todo.done chỉ là một kiểu ép kiểu gây nhầm lẫn và có thể được viết lại thành
count + Number(!Boolean(task.done))
Và bây giờ nó nên rõ ràng vì việc chuyển đổi toNumber các giá trị boolean theo một quy tắc đơn giản (theo tiêu chuẩn ECMAScript): 1 cho true, 0 cho false.
