首先,我對流很陌生,所以我仍然在處理一些常見的模式。如何分組一個流,然後根據組的密鑰分別處理組?
在很多庫中,我們可以使用.groupBy(keySelectorFn)將一個流分成一串流。例如,該料流被分成基於的「A」中的每個對象的值流(僞代碼中,不基於任何特定的庫):
var groups = Stream.of(
{ a: 1, b: 0 },
{ a: 1, b: 1 },
{ a: 2, b: 2 },
{ a: 1, b: 3 }
)
.groupBy(get('a'));
說我希望基於所述以不同方式處理基該組的「A」的值:
groups.map(function(group) {
if (..?) {
// Run the group through some process
}
return group;
});
我看不出怎麼弄的「A」,而無需耗費每個組的第一個元素(如果一個組的第一個元素被消耗的值組不再完整)。
在我看來,這似乎是我想用流處理的一個相當常見的事情。我採取了錯誤的做法嗎?
---編輯---
這裏有一個問題的更具體的例子,我卡上:
var groups = Stream.of(
{ a: 1, b: 0 },
{ a: 1, b: 1 },
{ a: 2, b: 0 },
{ a: 2, b: 1 },
{ a: 2, b: 2 },
{ a: 1, b: 2 }
)
.groupBy(get('a'));
如何選擇第1名對象,其中一個=== 1 ,以及前2個對象,其中=== 2,並通過任何其他對象直通?這似乎對我來說是合乎邏輯的:
groups.chain(function(group) {
return group.key === 1 ?
group.take(1) :
group.key === 2 ?
group.take(2) :
group ;
});
但是group.key不存在(即使它看起來有點......臭)。
你在尋找類似的東西嗎?:http://jsbin.com/haliqerita/edit?js,console –