2017-08-08 3 views
0

私はいくつかのJSONデータを変換する必要があり、RamdaのindexByはまさに私が望むものとまったく同じです。以下のコードは、単一のオブジェクトのために働く:可変インデックスのRamda indexByを使用

const operativeIndex = R.pipe(R.head, R.keysIn, 
    R.intersection(['Weight', 'Height', 'Month', 'Week']), R.head); 
const reIndex = R.indexBy(R.prop(operativeIndex(testObject)), testObject); 

しかし、私の再インデックス機能によってオブジェクトの配列をマッピングするために、私はそれがtestObjectの唯一の単回注射を必要とするようにreIndexを書き直す必要があると考えています。

どうすればいいですか?

:このようなオブジェクトに

[{ Height: '45', 
     L: '-0.3521', 
     M: '2.441', 
     S: '0.09182'}, 
{ Height: '45.5', 
     L: '-0.3521', 
     M: '2.5244', 
     S: '0.09153'}] 

:現在のコードが4つの許可指標の一つを有するであろうこのような配列、からtestObjectを変換:タスクを視覚化する


{ '45': 
    { Height: '45', 
    L: '-0.3521', 
    M: '2.441', 
    S: '0.09182' }, 
    '45.5': 
    { Height: '45.5', 
    L: '-0.3521', 
    M: '2.5244', 
    S: '0.09153' } } 

答えて

1

あなたの質問が正しく理解されている場合、reIndexはオブジェクトのリストを取得してオブジェクトインデックスを生成する関数になります。

あなたはこのよう

const operativeIndex = R.pipe(
    R.keysIn, 
    R.intersection(['Weight', 'Height', 'Month', 'Week']), 
    R.head 
) 

const reIndex = R.indexBy(R.chain(R.prop, operativeIndex)) 

それを行うことができそうなら、あなたはreIndex(list)Demoを行うことができます。

ところでkeysInはプロトタイプチェーンに上がっており、注文はではなく、であることに注意してください。

+0

はい、これは私が必要としていたものです。 'reIndex'を書き直すことで、' R.map(reIndex、list) 'を使い、単一の関数を使って上記の' testObject'のような多くのオブジェクトを再インデックスすることができます。 – ed94133

関連する問題