Advertisement
Guest User

Untitled

a guest
Jul 30th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. var // определение Option и функции которая оброрачивает в нее
  2. Some = val => [val],
  3. None = [],
  4. Of = val => isNil(val) ? None : Some(val),
  5. applyOption = fn => curryN(fn.length, compose(Of, fn)),
  6. isNone = option => option.length === 0,
  7. getOrElse = defaultVal => option => isNone(option) ?
  8. defaultVal :
  9. option[0],
  10.  
  11. // вспомогательная функция которая возврашает свойство если оно функция
  12. method = compose(
  13. val => is(Function, val) ? val : undefined,
  14. prop
  15. ),
  16. // оборачиваем все функции в опшион интерфейс - теперь они вместо андефайнед будут возврашать None
  17. findOrNone = applyOption(find),
  18. propOrNone = applyOption(prop),
  19. methodOrNone = applyOption(method),
  20. callOrNone = applyOption(call);
  21.  
  22. var list = [
  23. {
  24. id: 1,
  25. dataList: [
  26. {
  27. type: 'main',
  28. getData: () => 123,
  29. },
  30. {
  31. type: 'other',
  32. data: 456
  33. }
  34. ]
  35. },
  36. {
  37. id: 2
  38. }
  39. ]
  40. var getDataById = (id, list) => pipe(
  41. chain(findOrNone(propEq('id', id))),
  42. chain(propOrNone('dataList')),
  43. chain(findOrNone(propEq('type', 'main'))),
  44. chain(methodOrNone('getData')),
  45. chain(callOrNone),
  46. getOrElse('NOT DATA')
  47. )(Of(list))
  48.  
  49. getDataById(1, list)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement