2017-10-04 11 views
16

Tôi thực sự thích sử dụng cấu trúc foreach cho "cho vòng" trong C#. Tôi nghĩ nó rất sạch sẽ, hiệu quả và dễ đọc.Có cấu trúc foreach trong TypeScript tương tự như triển khai C# không?

Có cấu trúc tương tự trong TypeScript không? Ví dụ, thay vì điều này:

setAuthorFilters(selectedAuthors) 
{ 
    selectedAuthors.forEach(x => this.setAuthorFilter(x)); 
    this.updateUrl();   
} 

setAuthorFilter(selectedAuthor) 
{ 
    this.vm.SelectAuthors = this.vm.SelectAuthors.filter(x => x.id !== selectedAuthor.id); 
    this.vm.PreviousSelectedAuthors = this.vm.CurrentSelectedAuthors.slice(); 
    this.vm.CurrentSelectedAuthors.push(selectedAuthor); 
} 

Tôi muốn làm điều này:

setAuthorFilters(selectedAuthors) 
{ 
    foreach(var selectedAuthor in selectedAuthors) 
    { 
     this.vm.SelectAuthors = this.vm.SelectAuthors.filter(x => x.id !== selectedAuthor.id); 
     this.vm.PreviousSelectedAuthors = this.vm.CurrentSelectedAuthors.slice(); 
     this.vm.CurrentSelectedAuthors.push(selectedAuthor); 
    } 
    this.updateUrl();   
} 

Trả lời

20

Vâng, for ... of

Ví dụ:

for(let author of authors) 
{ 
    ... 
} 

Vì bạn đang sử dụng TypeScript, điều này cũng hoạt động trong IE. Xem https://basarat.gitbooks.io/typescript/content/docs/for...of.html:

Đối với tiền ES6 mục tiêu nguyên cảo sẽ tạo ra các tiêu chuẩn for (var i = 0; i < list.length; i ++) loại vòng lặp.

Trong đồng bằng Javascript, vậy mà không có nguyên cảo, điều này không được hỗ trợ trong IE (source)

Cập nhật: cho Phạm vi là let hơn tương tự như C# hơn var. Đã cập nhật ví dụ.

+2

Lưu ý rằng 'cho .. của ..' có thể được sử dụng với JS [Iterables] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol), trong khi bản dịch trước ES6 sẽ _không hoạt động với các bản dịch đó. – Kroltan

+2

@Kroltan cũng đáng chú ý là trình biên dịch có tùy chọn 'downlevelIteration' cho phép hỗ trợ ngay cả trong môi trường ES3. – Gerrit0

Các vấn đề liên quan