2017-02-04 46 views
0

如何管道多個數據數組?最後,我想實現這樣的事情:內存中的多個數據管道

const data = [{id: 1, data:100}, {id: 2, data: 200}, {id: 3, data: 3000}, ... ] 

我想這一點,但沒有奏效:

pipe(
    map(assoc('data', __, {})), 
    map(assoc('id', multiply(100, prop('data', __)))) 
)(range(1, 1000)) 

如果方法是使用兩個管道,則必須有某種方式來同時管道在兩個不同的陣列上。這如何實現?

+0

給出'data'作爲輸入,您的期望輸出是什麼? – davidchambers

+0

我有輸入本身,我只想生成大型對象數組。在這種情況下,我猜輸入的是輸入管道函數的範圍(1,1000)。 – jgr0

+0

對不起。我曾認爲「數據」代表輸入而不是輸出。我現在意識到我的錯誤。 – davidchambers

回答

4

我的建議是:

R.map(n => ({id: n, data: 100 * n}), R.range(1, 1000)) 

一個pointfree解決方案可用,但它不優雅:

R.map(R.converge(R.merge, 
       [R.objOf('id'), 
        R.compose(R.objOf('data'), R.multiply(100))]), 
     R.range(1, 10)) 
+0

同意。我獨立地嘗試了這個,並且在map(lift(merge)(objOf('id'),pipe(multiply(100),objOf('data'))))'中提出了一個近似重複的結果。第一個拉姆達更清晰。 –

0

這是我能想出的pointfree風格最好的,有點哈希因爲重複的數字應該與給予zipObj的鍵的數量相匹配。額外的密鑰可以在進化之後添加一個關聯

map(
    pipe(
    repeat(__, 2), 
    zipObj(['data', 'id']), 
    evolve({ 
     data: multiply(100) 
    }) 
) 
)(range(1, 1000))