Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var // определение Option и функции которая оброрачивает в нее
- Some = val => [val],
- None = [],
- Of = val => isNil(val) ? None : Some(val),
- applyOption = fn => curryN(fn.length, compose(Of, fn)),
- isNone = option => option.length === 0,
- getOrElse = defaultVal => option => isNone(option) ?
- defaultVal :
- option[0],
- // вспомогательная функция которая возврашает свойство если оно функция
- method = compose(
- val => is(Function, val) ? val : undefined,
- prop
- ),
- // оборачиваем все функции в опшион интерфейс - теперь они вместо андефайнед будут возврашать None
- findOrNone = applyOption(find),
- propOrNone = applyOption(prop),
- methodOrNone = applyOption(method),
- callOrNone = applyOption(call);
- var list = [
- {
- id: 1,
- dataList: [
- {
- type: 'main',
- getData: () => 123,
- },
- {
- type: 'other',
- data: 456
- }
- ]
- },
- {
- id: 2
- }
- ]
- var getDataById = (id, list) => pipe(
- chain(findOrNone(propEq('id', id))),
- chain(propOrNone('dataList')),
- chain(findOrNone(propEq('type', 'main'))),
- chain(methodOrNone('getData')),
- chain(callOrNone),
- getOrElse('NOT DATA')
- )(Of(list))
- getDataById(1, list)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement