Вам также следует рассмотреть вариант без Ramda.
Это может быть или не быть злоупотреблением Array#flatMap
, но я считаю это приемлемым: filter + map = flatMap
Допустим, вы хотите прибавить 10 к четным числам и исключить нечетные числа:
[1, 2, 3, 4].flatMap(n => n % 2 === 0 ? n + 10 : []);
//=> [12, 14]
Также следует отметить безточечный стиль. Это приятно, но иногда это мешает. Например, он не позволяет вам использовать некоторые хорошие конструкции ES6. Например, деструктуризация:
const getTeamOptions =
teams =>
teams.flatMap
( ({name: label, id: value, categories}) =>
categories.includes('Prem League')
? { label, value }
: []
);
getTeamOptions
( [ {name: 'Liverpool', id: '1', categories: ['Prem League']}
, {name: 'Man Utd', id: '2', categories: ['Blue Square']}
, {name: 'Sheff Utd', id: '2', categories: ['Prem League']}
]
);
//=> [ {label: "Liverpool", value: "1"}
//=> , {label: "Sheff Utd", value: "2"} ]
Для полноты, вот вариант с использованием Array#reduce
:
const getTeamOptions =
teams =>
teams.reduce
( (acc, {name: label, id: value, categories}) =>
categories.includes('Prem League')
? (acc.push({ label, value }), acc)
: acc
, []
);
Не поймите меня неправильно! Рамда абсолютно потрясающе . Когда я впервые встретил эту библиотеку, мне захотелось переписать с ней весь свой код, потом я открыл для себя безточечный стиль и снова все переписал. В конце концов, я полностью потерял мысленный контроль над своим кодом, и это проблема. Вам следует использовать Ramda только тогда, когда она вам хорошо служит. В этом случае, если честно, можно обойтись и без.