2016-08-08 1 views

答えて

8

オプションは、R.applySpecを使用することです。これは、指定された "spec"の各キーで関数を結果関数の与えられた引数に対して適用することによってオブジェクトを構築する新しい関数を作成します。

const mapToOtherFormat = R.applySpec({ 
 
    Name: R.prop('Name'), 
 
    Email: R.path(['User', 'Email']), 
 
    Foo: R.path(['Foo', 0, 'Bar']) 
 
}) 
 

 
const result = mapToOtherFormat({ 
 
    Name: 'Bob', 
 
    User: { Email: '[email protected]' }, 
 
    Foo: [{ Bar: 'moo' }, { Bar: 'baa' }] 
 
}) 
 

 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.min.js"></script>

2

は私の試みです:

const mapToOtherFormat = R.converge(
    (...list) => R.pipe(...list)({}), 
    [ 
     R.pipe(R.view(R.lensProp('Name')), R.set(R.lensProp('Name'))), 
     R.pipe(R.view(R.compose(R.lensProp('User'), R.lensProp('Email'))), R.set(R.lensProp('Email'))), 
     R.pipe(R.view(R.compose(R.lensProp('Foo'), R.lensIndex(0), R.lensProp('Bar'))), R.set(R.lensProp('Foo'))) 
    ] 
) 

const obj = {Name: 'name', User: {Email: 'email'}, Foo: [{Bar: 2}]} 
mapToOtherFormat(obj) 

Ramda console

[編集] 我々は、それは完全にポイントを無料にすることができます。

const mapToOtherFormat = R.converge(
    R.pipe(R.pipe, R.flip(R.call)({})), 
    [ 
     R.pipe(R.view(R.lensProp('Name')), R.set(R.lensProp('Name'))), 
     R.pipe(R.view(R.compose(R.lensProp('User'), R.lensProp('Email'))), R.set(R.lensProp('Email'))), 
     R.pipe(R.view(R.compose(R.lensProp('Foo'), R.lensIndex(0), R.lensProp('Bar'))), R.set(R.lensProp('Foo'))) 
    ] 
) 

Ramda console

関連する問題