2017-09-29 7 views
0

私は関数型プログラミングを学習しています。 ramda.jsを使用するには、次のコードと機能的に同等のものは何でしょうか?ramda.jsを使用したネストされたリストのインデックス

const indexArray = (array)=>{ 
    let idx = 0; 
    return array.map((l)=>{ 
     return l.map((w)=>{ 
     let nw = { id: idx, val: w } 
     idx++ 
     return nw 
     }) 
    }) 
} 

indexArray([["Hello", "World"],["Foo", "Bar"]]) 

//=> [[{"id":0,"val":"Hello"},{"id":1,"val":"World"}],[{"id":2,"val":"Foo"},{"id":3,"val":"Bar"}]] 
+0

これは、そこに途中を得るが、リスト構造を維持することはトリッキーですします: 'constのindexArray =パイプ(平ら、AddIndexメソッド(マップ)((IDX、ヴァル)=>({IDX、ヴァル}) )) ')。 –

答えて

0

Scottの部分解答(感謝!)と再帰関数を使用して、私は以下の解決策を考え出しました。私はそれを行うよりエレガントな方法がなければならないと考えることを助けることができません。

const indexElements = R.pipe(R.flatten, R.addIndex(map)((val, idx) => ({idx, val}))) 

const lengths = R.map((l)=>l.length) 

const rf = (output, input, indexes)=>{ 
    if (indexes.length == 0) return output 
    let index = indexes[0] 
    return rf(
    R.append(R.take(index,input), output), 
    R.drop(index, input), 
    R.drop(1, indexes) 
) 
} 

const indexNestedArray = (arr)=>rf([], indexElements(arr), lengths(arr)) 

indexNestedArray([["Hello", "World"],["Foo", "Bar"]]) 
// => [[{"idx": 0, "val": "Hello"}, {"idx": 1, "val": "World"}], [{"idx": 2, "val": "Foo"}, {"idx": 3, "val": "Bar"}]] 
関連する問題