2017-05-05 7 views
0

ramda.js内のオブジェクトのプロパティを修正する必要があります。私はレンズを使わないでください。lenseを使用せずにRamdaでプロパティを条件付きで追加して名前を変更する

次のようなデータを持って、私は必要があります。

もしaでのアレイのプロパティ内のオブジェクトとb他人

  • プロパティ「animationTimingFunction」値ease

    で「緩和」プロパティキーを追加する必要はありません。
  • プロパティ「animationTimingFunction」はこのプロパティの名前を「easing」に変更し、そのままにします。

入力データ:

let data = { 
    "a": [{ 
     "opacity": "1", 
     "offset": "0" 
    }, { 
     "opacity": "0", 
     "offset": "0.25", 
     "animationTimingFunction": "linear" 
    }, { 
     "opacity": "1", 
     "offset": "0.5" 
    }, 
    "b": [{ 
     "transform": "scale3d(1, 1, 1)", 
     "offset": "0" 
    }, { 
     "transform": "scale3d(1.05, 1.05, 1.05)", 
     "offset": "0.5" 
    }, { 
     "transform": "scale3d(1, 1, 1)", 
     "offset": "1" 
    }] 
}; 

出力は次のようになります。

let data = { 
    "a": [{ 
     "opacity": "1", 
     "offset": "0", 
     "easing": "ease" 
    }, { 
     "opacity": "0", 
     "offset": "0.25", 
     "easing": "linear" 
    }, { 
     "opacity": "1", 
     "offset": "0.5", 
     "easing": "ease" 
    }, 
    "b": [{ 
     "transform": "scale3d(1, 1, 1)", 
     "offset": "0", 
     "easing": "ease" 
    }, { 
     "transform": "scale3d(1.05, 1.05, 1.05)", 
     "offset": "0.5", 
     "easing": "ease" 
    }, { 
     "transform": "scale3d(1, 1, 1)", 
     "offset": "1", 
     "easing": "ease" 
    }] 
}; 

私が試してみましたスタートとして、私は条件部を欠場:

let convertEasing = (data) =>{ 
     let convert = data => R.assoc('easing', 'linear'); 
     let result = R.map(R.map(convert(data)), data) 
     return result; 
    }; 

答えて

1

方法についてちょうど

const alter = obj => { 
    const ease = prop('animationTimingFunction', obj) || 'ease'; 
    return dissoc('animationTimingFunction', assoc('easing', ease, obj)); 
} 

map(map(alter))(data); 

あなたが選択した場合、それはフリー指し行うことができます:

const alter = pipe(
    chain(
    assoc('easing'), 
    pipe(prop('animationTimingFunction'), defaultTo('ease')), 
), 
    dissoc('animationTimingFunction') 
) 

しかし、読みやすさに失った私の心にします。

Ramda REPLではeitherversionが表示されます。

+0

ありがとうScott、私は実際にR.condを使ってみましたが、あなたのバージョンはもっとはっきりしています。 – GibboK

関連する問題