2016-02-04 17 views
7

Làm thế nào để bạn lặp qua một bộ trong TypeScript? for..of không hoạt động:Làm cách nào để lặp qua một Bộ trong TypeScript?

'Set<string>' is not an array type or a string type 

.forEach là không thể chấp nhận được, bởi vì nó ẩn this. Tôi không muốn làm một vòng lặp trong khi thử một khối catch. Tôi đang thiếu gì? Nó không thể có thể vụng về như vậy để yêu cầu thử {while} catch {}.

Trả lời

15

@SnareChops là chủ yếu đúng:

mySet.forEach(function(item){ 
    // do something with "this" 
}, **this**); 

này hoạt động.

Tôi đoán:

for(item of mySet.values()){ 
} 

sẽ làm việc nếu tôi không làm việc với es-shim thứ như chúng ta đang rối tung mọi thứ cho tôi. Nhưng những thứ shim được quy định bởi 2 phi hành đoàn kiễu góc rất _ (ツ) _/¯

Chỉ có điều khác mà làm việc là:

for (var item of Arrays.from(set.values())) { 
} 

hoặc một cái gì đó như thế, mà chỉ là khủng khiếp.

+4

Array.from? Mảng dường như không hoạt động – vinntec

2

Bạn vẫn có thể sử dụng .forEach với đúng this bằng cách sử dụng một chức năng thường xuyên thay vì một mũi tên chức năng

mySet.forEach(function(item){ 
    expect(this).toEqual(item); 
}); 

So với

class MyClass{ 
    ... 
    doSomething():{ 
     mySet.forEach((item) => { 
      expect(this instanceof MyClass).toEqual(true); 
     }); 
    } 
} 

Một cách khác để lặp là sử dụng một vòng lặp for qua các giá trị

for(item of mySet.values()){ 
    ... 
} 

Thông tin thêm trên lặp Set với foreach có thể tìm thấy here

+0

Tôi đánh giá cao phản ứng nhanh chóng nhưng tôi đã tìm thấy những điều sau đây là đúng: Tiếp cận 1: "này" không được bảo quản, và tôi nghĩ rằng nó thường sẽ là lambda của là những người giữ gìn "này" Cách tiếp cận 2: Điều này không biên dịch cho tôi. Cách duy nhất tôi đã tìm thấy hoạt động cho đến nay ngoài phương pháp "trong khi" đã là: cho (var key of Array.from (this.keys.values ​​())) và đó là điều mong muốn từ Tôi nghĩ rằng nó tạo ra một mảng mới và Array.from không được hỗ trợ đầy đủ ở khắp mọi nơi. – user1019182

+0

Các follwing __ là đúng? – SnareChops

1

này đã làm việc cho tôi:

this.mySet.forEach((value: string, key: string) => { 
    console.log(key); 
    console.log(value); 
}); 

tôi tìm thấy nó ở đây: Other Stack Overflow question

0

Mở rộng câu trả lời upvoted nhất, nó cũng là loại an toàn nếu chúng ta sử dụng let cho biến lặp, vì vậy:

for (let elem of setOfElems) { 
    ... do anything with elem... 
} 

Điều này sẽ đảm bảo rằng elem sẽ có loại X, nếu setOfElems được khai báo là Set<X>.

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