Ramda
__ Добавлено в v0.6.0
Специальное значение-заполнитель, используемое для обозначения «пропусков» в каррированных функциях, что позволяет частично применять любую комбинацию аргументов независимо от их положения.
Если g — каррированная функция с тремя аргументами, а _ — R.__, то следующие выражения эквивалентны:
g(1, 2, 3)g(_, 2, 3)(1)g(_, _, 3)(1)(2)g(_, _, 3)(1, 2)g(_, 2, _)(1, 3)g(_, 2)(1)(3)g(_, 2)(1, 3)g(_, 2)(_, 3)(1)
const greet = R.replace('{name}', R.__, 'Hello, {name}!');
greet('Alice'); //=> 'Hello, Alice!' add Добавлено в v0.1.0
Number → Number → Number
Параметры
-
a -
b
Возвращает
- Number
Складывает два значения.
См. также subtract.
R.add(2, 3); //=> 5 R.add(7)(10); //=> 17
addIndex Добавлено в v0.15.0
(((a …) → b) … → [a] → *) → (((a …, Int, [a]) → b) … → [a] → *)
Параметры
-
fnФункция перебора списка, которая не передаёт индекс или список в свою функцию обратного вызова
Возвращает
- function Изменённая функция перебора списка, передающая в свою функцию обратного вызова (элемент, индекс, список)
Создаёт новую функцию перебора списка на основе существующей, добавляя в её функцию обратного вызова два параметра: текущий индекс и весь список.
Например, функция R.map станет больше похожа на Array.prototype.map. Учтите, что это работает только для функций, у которых функция обратного вызова перебора является первым параметром, а список — последним. (Последнее условие может быть несущественным, если параметр списка не используется.)
const mapIndexed = R.addIndex(R.map); mapIndexed((val, idx) => idx + '-' + val, ['f', 'o', 'o', 'b', 'a', 'r']); //=> ['0-f', '1-o', '2-o', '3-b', '4-a', '5-r']
addIndexRight Добавлено в v0.29.0
((a … → b) … → [a] → *) → (a …, Int, [a] → b) … → [a] → *)
Параметры
-
fnФункция перебора списка, которая не передаёт индекс или список в свою функцию обратного вызова
Возвращает
- function Изменённая функция перебора списка, передающая в свою функцию обратного вызова (элемент, индекс, список)
Как и addIndex, addIndexRight создаёт новую функцию перебора списка на основе существующей, добавляя в её функцию обратного вызова два параметра: текущий индекс и весь список.
В отличие от addIndex, addIndexRight перебирает элементы справа налево.
const revmap = (fn, ary) => R.map(fn, R.reverse(ary)); const revmapIndexed = R.addIndexRight(revmap); revmapIndexed((val, idx) => idx + '-' + val, ['f', 'o', 'o', 'b', 'a', 'r']); //=> [ '5-r', '4-a', '3-b', '2-o', '1-o', '0-f' ]
adjust Добавлено в v0.14.0
Number → (a → a) → [a] → [a]
Параметры
-
idxИндекс.
-
fnФункция, которую нужно применить.
-
listОбъект, подобный массиву, значение которого по указанному индексу будет заменено.
Возвращает
- Array Копию переданного объекта, подобного массиву, в которой элемент с индексом `idx` заменён значением, возвращённым при применении `fn` к исходному элементу.
Применяет функцию к значению по заданному индексу массива и возвращает новую копию массива, в которой элемент по этому индексу заменён результатом применения функции.
Если idx < -list.length || idx >= list.length, возвращается исходный список.
См. также update.
R.adjust(1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'B', 'c', 'd'] R.adjust(-1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c', 'D'] // out-of-range returns original list R.adjust(4, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c', 'd'] R.adjust(-5, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c', 'd']
all Добавлено в v0.1.0
(a → Boolean) → [a] → Boolean
Параметры
-
fnФункция-предикат.
-
listПроверяемый массив.
Возвращает
- Boolean `true`, если предикату удовлетворяют все элементы, иначе `false`.
Возвращает true, если предикату соответствуют все элементы списка, и false, если есть хотя бы один элемент, который ему не соответствует.
Если у второго аргумента есть метод all, вызывает его.
Работает как трансдьюсер, если на месте списка передан преобразователь.
См. также any, none, transduce.
const equals3 = R.equals(3); R.all(equals3)([3, 3, 3, 3]); //=> true R.all(equals3)([3, 3, 1, 3]); //=> false
allPass Добавлено в v0.9.0
[(*… → Boolean)] → (*… → Boolean)
Параметры
-
predicatesМассив предикатов для проверки
Возвращает
- function Объединённый предикат
Принимает список предикатов и возвращает предикат, который для заданного списка аргументов возвращает true, если этим аргументам удовлетворяют все переданные предикаты.
Возвращаемая функция — каррированная функция, арность которой совпадает с арностью предиката с наибольшей арностью.
const isQueen = R.propEq('Q', 'rank');
const isSpade = R.propEq('♠︎', 'suit');
const isQueenOfSpades = R.allPass([isQueen, isSpade]);
isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false
isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true always Добавлено в v0.1.0
a → (* → a)
Параметры
-
valЗначение, которое нужно обернуть в функцию
Возвращает
- function Функцию вида :: * -> val.
Возвращает функцию, которая всегда возвращает заданное значение. Обратите внимание: для непримитивных значений возвращается ссылка на исходное значение.
В других языках и библиотеках эта функция известна как const, constant или K (для комбинатора K).
const t = R.always('Tee');
t(); //=> 'Tee' and Добавлено в v0.1.0
a → b → a | b
Параметры
-
a -
b
Возвращает
- Any
Возвращает первый аргумент, если он ложный, иначе второй аргумент. Если оба входных значения являются Boolean, работает как логический оператор and.
R.and(true, true); //=> true R.and(true, false); //=> false R.and(false, true); //=> false R.and(false, false); //=> false
andThen Добавлено в v0.27.1
(a → b) → (Promise e a) → (Promise e b)
(a → (Promise e b)) → (Promise e a) → (Promise e b)Параметры
-
onSuccessФункция, которую нужно применить. Может возвращать значение или промис со значением.
-
p
Возвращает
- Promise Результат вызова `p.then(onSuccess)`
Возвращает результат применения функции onSuccess к значению внутри успешно разрешённого промиса. Это полезно при работе с промисами в композициях функций.
См. также otherwise, pipeWith.
const makeQuery = email => ({ query: { email }});
const fetchMember = request =>
Promise.resolve({ firstName: 'Bob', lastName: 'Loblaw', id: 42 });
const pickName = R.pick(['firstName', 'lastName'])
//getMemberName :: String -> Promise ({ firstName, lastName })
const getMemberName = R.pipe(
makeQuery,
fetchMember,
R.andThen(pickName),
);
// Alternately
const getMemberName = R.pipe(
makeQuery,
fetchMember,
)
R.pipeWith(R.andThen, [getMemberName, pickName])('bob@gmail.com').then(console.log)
// logs {"firstName":"Bob","lastName":"Loblaw"}
getMemberName('bob@gmail.com').then(console.log); any Добавлено в v0.1.0
(a → Boolean) → [a] → Boolean
Параметры
-
fnФункция-предикат.
-
listПроверяемый массив.
Возвращает
- Boolean `true`, если предикату удовлетворяет хотя бы один элемент, иначе `false`.
Возвращает true, если предикату соответствует хотя бы один элемент списка, и false в противном случае.
Если у второго аргумента есть метод any, вызывает его.
Работает как трансдьюсер, если на месте списка передан преобразователь.
См. также all, none, transduce.
const lessThan0 = R.flip(R.lt)(0); const lessThan2 = R.flip(R.lt)(2); R.any(lessThan0)([1, 2]); //=> false R.any(lessThan2)([1, 2]); //=> true
anyPass Добавлено в v0.9.0
[(*… → Boolean)] → (*… → Boolean)
Параметры
-
predicatesМассив предикатов для проверки
Возвращает
- function Объединённый предикат
Принимает список предикатов и возвращает предикат, который для заданного списка аргументов возвращает true, если этим аргументам удовлетворяет хотя бы один из переданных предикатов.
Возвращаемая функция — каррированная функция, арность которой совпадает с арностью предиката с наибольшей арностью.
const isClub = R.propEq('♣', 'suit');
const isSpade = R.propEq('♠', 'suit');
const isBlackCard = R.anyPass([isClub, isSpade]);
isBlackCard({rank: '10', suit: '♣'}); //=> true
isBlackCard({rank: 'Q', suit: '♠'}); //=> true
isBlackCard({rank: 'Q', suit: '♦'}); //=> false ap Добавлено в v0.3.0
[a → b] → [a] → [b]
Apply f => f (a → b) → f a → f b(r → a → b) → (r → a) → (r → b)Параметры
-
applyF -
applyX
Возвращает
- *
ap применяет список функций к списку значений.
Если у первого аргумента есть метод ap, вызывает его. Также рассматривает каррированные функции как аппликативные функторы.
R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]
R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> ["tasty pizza", "tasty salad", "PIZZA", "SALAD"]
// R.ap can also be used as S combinator
// when only two functions are passed
R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA' aperture Добавлено в v0.12.0
Number → [a] → [[a]]
Параметры
-
nРазмер создаваемых кортежей
-
listСписок, который нужно разбить на кортежи длиной
n
Возвращает
- Array Полученный список кортежей длиной `n`
Возвращает новый список, состоящий из кортежей длиной n, сформированных из последовательных элементов. Если n больше длины списка, возвращается пустой список.
Работает как трансдьюсер, если на месте списка передан преобразователь.
См. также transduce.
R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]] R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]] R.aperture(7, [1, 2, 3, 4, 5]); //=> []
append Добавлено в v0.1.0
a → [a] → [a]
Параметры
-
elЭлемент, добавляемый в конец нового списка.
-
listСписок элементов, в который нужно добавить новый элемент. список.
Возвращает
- Array Новый список, содержащий элементы исходного списка, за которыми следует `el`.
Возвращает новый список, содержащий элементы заданного списка, за которыми следует заданный элемент.
См. также prepend.
R.append('tests', ['write', 'more']); //=> ['write', 'more', 'tests']
R.append('tests', []); //=> ['tests']
R.append(['tests'], ['write', 'more']); //=> ['write', 'more', ['tests']] apply Добавлено в v0.7.0
(*… → a) → [*] → a
Параметры
-
fnФункция, которая будет вызвана с
args -
argsАргументы, с которыми нужно вызвать
fn
Возвращает
- * result Результат, эквивалентный `fn(...args)`
Применяет функцию fn к списку аргументов args. Это полезно для создания функции с фиксированной арностью на основе функции с переменным числом аргументов. fn должна быть привязанной функцией, если контекст имеет значение.
const nums = [1, 2, 3, -99, 42, 6, 7]; R.apply(Math.max, nums); //=> 42
applySpec Добавлено в v0.20.0
{k: ((a, b, …, m) → v)} → ((a, b, …, m) → {k: v}) Параметры
-
specобъект, рекурсивно сопоставляющий свойства функциям, которые создают значения этих свойств.
Возвращает
- function Функцию, которая возвращает объект той же структуры, что и `spec`, устанавливая для каждого свойства значение, возвращённое соответствующей функцией при вызове с переданными аргументами.
Принимает объект-спецификацию, рекурсивно сопоставляющий свойства функциям, и создаёт функцию, возвращающую объект той же структуры, сопоставляя каждому свойству результат вызова соответствующей функции с переданными аргументами.
const getMetrics = R.applySpec({
sum: R.add,
nested: { mul: R.multiply }
});
getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } } applyTo Добавлено в v0.25.0
a → (a → b) → b
Параметры
-
xЗначение
-
fФункция, которую нужно применить
Возвращает
- * Результат применения `f` к `x`
Принимает значение и применяет к нему функцию.
Эта функция также известна как комбинатор thrush.
const t42 = R.applyTo(42); t42(R.identity); //=> 42 t42(R.add(1)); //=> 43
ascend Добавлено в v0.23.0
Ord b => (a → b) → a → a → Number
Параметры
-
fnФункция с одним аргументом, возвращающая сравнимое значение
-
aПервый сравниваемый элемент.
-
bВторой сравниваемый элемент.
Возвращает
- Number `-1`, если fn(a) < fn(b), `1`, если fn(b) < fn(a), иначе `0`
Создаёт компаратор для сортировки по возрастанию на основе функции, возвращающей значение, которое можно сравнить с помощью < и >.
См. также descend, ascendNatural, descendNatural.
const byAge = R.ascend(R.prop('age'));
const people = [
{ name: 'Emma', age: 70 },
{ name: 'Peter', age: 78 },
{ name: 'Mikhail', age: 62 },
];
const peopleByYoungestFirst = R.sort(byAge, people);
//=> [{ name: 'Mikhail', age: 62 },{ name: 'Emma', age: 70 }, { name: 'Peter', age: 78 }] ascendNatural Добавлено в v0.30.1
s → (a → String) → a → a → Number
Параметры
-
localesСтрока с языковым тегом BCP 47 или массив таких строк. Соответствует параметру locales конструктора Intl.Collator().
-
fnФункция с одним аргументом, возвращающая сравнимую строку
-
aПервый сравниваемый элемент.
-
bВторой сравниваемый элемент.
Возвращает
- Number `-1`, если a находится перед b, `1`, если a находится после b, иначе `0`
Создаёт компаратор для сортировки по возрастанию на основе функции, возвращающей значение, сравниваемое с помощью естественной сортировки через localeCompare.
См. также ascend.
const unsorted = ['3', '1', '10', 'Ørjan', 'Bob', 'Älva'];
R.sort(R.ascendNatural('en', R.identity), unsorted);
// => ['1', '3', '10', 'Älva', 'Bob', 'Ørjan']
R.sort(R.ascendNatural('sv', R.identity), unsorted);
// => ['1', '3', '10', 'Bob', 'Älva', 'Ørjan']
R.sort(R.ascend(R.identity), unsorted);
// => ['1', '10', '3', 'Bob', 'Älva', 'Ørjan'] assoc Добавлено в v0.8.0
Idx → a → {k: v} → {k: v} Idx = String | IntПараметры
-
propИмя свойства, которое нужно задать
-
valНовое значение
-
objОбъект, который нужно клонировать
Возвращает
- Object Новый объект, эквивалентный исходному, за исключением изменённого свойства.
Создаёт поверхностную копию объекта, задавая или переопределяя указанное свойство переданным значением. Обратите внимание, что свойства прототипа также копируются и переносятся в новый объект. Все непримитивные свойства копируются по ссылке.
R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3}
R.assoc(4, 3, [1, 2]); //=> [1, 2, undefined, undefined, 3]
R.assoc(-1, 3, [1, 2]); //=> [1, 3] assocPath Добавлено в v0.8.0
[Idx] → a → {a} → {a} Idx = String | Int | SymbolПараметры
-
pathПуть, который нужно задать
-
valНовое значение
-
objОбъект, который нужно клонировать
Возвращает
- Object Новый объект, эквивалентный исходному, за исключением указанного пути.
Создаёт поверхностную копию объекта, задавая или переопределяя узлы, необходимые для создания указанного пути, и помещая заданное значение в конец этого пути. Обратите внимание, что свойства прототипа также копируются и переносятся в новый объект. Все непримитивные свойства копируются по ссылке.
См. также dissocPath.
R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}
// Any missing or non-object keys in path will be overridden
R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}
R.assocPath(['a', 1, 'c'], 42, {a: []}); // => {a: [undefined, {c: 42}]}
R.assocPath(['a', -1], 42, {a: [1, 2]}); // => {a: [1, 42]} binary Добавлено в v0.2.0
(a → b → c → … → z) → ((a, b) → z)
Параметры
-
fnФункция, которую нужно обернуть.
Возвращает
- function Новая функция-обёртка для `fn`. Гарантируется, что арность новой функции равна 2.
Оборачивает функцию с любой арностью (включая нулевую) в функцию, принимающую ровно 2 параметра. Лишние параметры не передаются исходной функции.
const takesThreeArgs = function(a, b, c) {
return [a, b, c];
};
takesThreeArgs.length; //=> 3
takesThreeArgs(1, 2, 3); //=> [1, 2, 3]
const takesTwoArgs = R.binary(takesThreeArgs);
takesTwoArgs.length; //=> 2
// Only 2 arguments are passed to the wrapped function
takesTwoArgs(1, 2, 3); //=> [1, 2, undefined] bind Добавлено в v0.6.0
(* → *) → {*} → (* → *) Параметры
-
fnФункция, которую нужно привязать к контексту
-
thisObjКонтекст, к которому нужно привязать
fn
Возвращает
- function Функция, которая будет выполняться в контексте `thisObj`.
Создаёт функцию, привязанную к контексту. Примечание: R.bind не предоставляет дополнительных возможностей привязки аргументов, доступных в Function.prototype.bind.
См. также partial.
const log = R.bind(console.log, console);
R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}
// logs {a: 2} both Добавлено в v0.12.0
(*… → Boolean) → (*… → Boolean) → (*… → Boolean)
Параметры
-
fПредикат
-
gДругой предикат
Возвращает
- function функцию, которая передаёт свои аргументы функциям `f` и `g`, а затем объединяет их результаты с помощью `&&`.
Функция, которая вызывает две переданные функции и возвращает && их результатов. Если результат первой функции ложный, возвращается он; в противном случае возвращается результат второй функции. Обратите внимание: вычисление выполняется по короткой схеме, то есть вторая функция не вызывается, если первая возвращает ложное значение.
Помимо функций, R.both принимает также любые аппликативные функторы, совместимые с fantasy-land.
См. также either, allPass, and.
const gt10 = R.gt(R.__, 10) const lt20 = R.lt(R.__, 20) const f = R.both(gt10, lt20); f(15); //=> true f(30); //=> false R.both(Maybe.Just(false), Maybe.Just(55)); // => Maybe.Just(false) R.both([false, false, 'a'], [11]); //=> [false, false, 11]
call Добавлено в v0.9.0
((*… → a), *…) → a
Параметры
-
fnФункция, применяемая к остальным аргументам.
-
argsЛюбое количество позиционных аргументов.
Возвращает
- *
Возвращает результат вызова первого аргумента с остальными аргументами. Иногда это полезно в качестве сходящейся функции для R.converge: первая ветвь может вернуть функцию, а остальные ветви — значения, которые будут переданы этой функции в качестве аргументов.
См. также apply.
R.call(R.add, 1, 2); //=> 3
const indentN = R.pipe(
R.repeat(' '),
R.join(''),
R.replace(/^(?!$)/gm)
);
const format = R.converge(
R.call,
[
R.pipe(R.prop('indent'), indentN),
R.prop('value')
]
);
format({indent: 2, value: 'foo\nbar\nbaz\n'}); //=> ' foo\n bar\n baz\n' chain Добавлено в v0.3.0
Chain m => (a → m b) → m a → m b
Параметры
-
fnФункция для отображения
-
listСписок для отображения
Возвращает
- Array Результат плоского отображения `list` с помощью `fn`
chain применяет функцию к элементам списка и объединяет результаты. В некоторых библиотеках chain также известна как flatMap.
Если у второго аргумента есть метод chain, вызывает его в соответствии со спецификацией FantasyLand Chain.
Если второй аргумент — функция, chain(f, g)(x) эквивалентна f(g(x), x).
Работает как трансдьюсер, если на месте списка передан преобразователь.
const duplicate = n => [n, n]; R.chain(duplicate, [1, 2, 3]); //=> [1, 1, 2, 2, 3, 3] R.chain(R.append, R.head)([1, 2, 3]); //=> [1, 2, 3, 1]
clamp Добавлено в v0.20.0
Ord a => a → a → a → a
Параметры
-
minimumНижняя граница диапазона (включительно)
-
maximumВерхняя граница диапазона (включительно)
-
valueОграничиваемое значение
Возвращает
- Number Возвращает `minimum`, если `val < minimum`, `maximum`, если `val > maximum`, и `val` в противном случае
Ограничивает число заданным диапазоном.
Также работает с другими упорядочиваемыми типами, например строками и датами.
R.clamp(1, 10, -5) // => 1 R.clamp(1, 10, 15) // => 10 R.clamp(1, 10, 4) // => 4
clone Добавлено в v0.1.0
{*} → {*} Параметры
-
valueОбъект или массив для клонирования
Возвращает
- * Глубокую копию `val`
Создаёт глубокую копию исходного объекта, которую можно использовать вместо него без сохранения ссылок на исходный объект. Исходный объект может содержать (вложенные) Array и Object, Number, String, Boolean и Date. Function присваиваются по ссылке, а не копируются.
Если имеется метод clone, вызывает его.
Обратите внимание: если несколько узлов исходного объекта ссылаются на один объект, возвращённый объект сохранит ту же структуру, но ссылки будут указывать на соответствующее место в клонированном значении.
const objects = [{}, {}, {}];
const objectsClone = R.clone(objects);
objects === objectsClone; //=> false
objects[0] === objectsClone[0]; //=> false collectBy Добавлено в v0.28.0
Idx a => (b → a) → [b] → [[b]]
Idx = String | Int | SymbolПараметры
-
fnФункция :: a -> Idx
-
listМассив для группировки
Возвращает
- Array Массив массивов, каждый из которых содержит элементы, для которых функция, возвращающая строку, вернула одинаковое значение.
Разбивает список на подсписки, вызывая для каждого элемента функцию, возвращающую ключ, и группируя результаты в соответствии с возвращёнными значениями.
R.collectBy(R.prop('type'), [
{type: 'breakfast', item: '☕️'},
{type: 'lunch', item: '🌯'},
{type: 'dinner', item: '🍝'},
{type: 'breakfast', item: '🥐'},
{type: 'lunch', item: '🍕'}
]);
// [ [ {type: 'breakfast', item: '☕️'},
// {type: 'breakfast', item: '🥐'} ],
// [ {type: 'lunch', item: '🌯'},
// {type: 'lunch', item: '🍕'} ],
// [ {type: 'dinner', item: '🍝'} ] ] comparator Добавлено в v0.1.0
((a, b) → Boolean) → ((a, b) → Number)
Параметры
-
predФункция-предикат с двумя аргументами, которая возвращает
true, если первый аргумент меньше второго, иfalseв противном случае
Возвращает
- function Функцию вида :: a -> b -> Int, которая возвращает `-1`, если a < b, `1`, если b < a, и `0` в противном случае
Создаёт функцию-компаратор на основе функции, определяющей, меньше ли первый элемент второго.
const byAge = R.comparator((a, b) => a.age < b.age);
const people = [
{ name: 'Emma', age: 70 },
{ name: 'Peter', age: 78 },
{ name: 'Mikhail', age: 62 },
];
const peopleByIncreasingAge = R.sort(byAge, people);
//=> [{ name: 'Mikhail', age: 62 },{ name: 'Emma', age: 70 }, { name: 'Peter', age: 78 }] complement Добавлено в v0.12.0
(*… → *) → (*… → Boolean)
Параметры
-
f
Возвращает
- function
Принимает функцию f и возвращает функцию g, такую что при вызове с теми же аргументами, если f возвращает «истинное» значение, g возвращает false, а если f возвращает «ложное» значение, g возвращает true.
R.complement можно применить к любому функтору
См. также not.
const isNotNil = R.complement(R.isNil); R.isNil(null); //=> true isNotNil(null); //=> false R.isNil(7); //=> false isNotNil(7); //=> true
compose Добавлено в v0.1.0
((y → z), (x → y), …, (o → p), ((a, b, …, n) → o)) → ((a, b, …, n) → z)
Параметры
-
...functionsФункции для композиции
Возвращает
- function
Выполняет композицию функций справа налево. Последний аргумент может иметь любую арность; остальные аргументы должны быть унарными.
Примечание: результат compose автоматически не каррируется.
См. также pipe.
const classyGreeting = (firstName, lastName) => "The name's " + lastName + ", " + firstName + " " + lastName
const yellGreeting = R.compose(R.toUpper, classyGreeting);
yellGreeting('James', 'Bond'); //=> "THE NAME'S BOND, JAMES BOND"
R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7 composeWith Добавлено в v0.26.0
((* → *), [(y → z), (x → y), …, (o → p), ((a, b, …, n) → o)]) → ((a, b, …, n) → z)
Параметры
-
transformerПреобразующая функция
-
functionsФункции для композиции
Возвращает
- function
Выполняет композицию функций справа налево с помощью преобразующей функции. Последняя функция может иметь любую арность; остальные функции должны быть унарными. В отличие от compose, функции передаются в массиве.
Примечание: результат composeWith автоматически не каррируется. Преобразующая функция не применяется к последнему аргументу.
const composeWhileNotNil = R.composeWith((f, res) => R.isNil(res) ? res : f(res));
composeWhileNotNil([R.inc, R.prop('age')])({age: 1}) //=> 2
composeWhileNotNil([R.inc, R.prop('age')])({}) //=> undefined concat Добавлено в v0.1.0
[a] → [a] → [a]
String → String → StringПараметры
-
firstListПервый список
-
secondListВторой список
Возвращает
- Array Список, состоящий из элементов `firstList`, за которыми следуют элементы `secondList`.
Возвращает результат объединения заданных списков или строк.
Примечание: R.concat требует, чтобы оба аргумента были одного типа, в отличие от встроенного метода Array.prototype.concat. При попытке concat массива со значением, не являющимся массивом, будет выброшена ошибка.
Выполняет диспетчеризацию на метод concat первого аргумента, если он имеется. Также может объединять два элемента полугруппы, совместимой с fantasy-land.
R.concat('ABC', 'DEF'); // 'ABCDEF'
R.concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]
R.concat([], []); //=> [] cond Добавлена в v0.6.0
[[(*… → Boolean),(*… → *)]] → (*… → *)
Параметры
-
pairsСписок пар [предикат, преобразователь]
Возвращает
- function
Возвращает функцию, fn, которая инкапсулирует логику if/else, if/else, .... R.cond принимает список пар [предикат, преобразователь]. Все аргументы fn по очереди передаются каждому предикату, пока один из них не вернёт «истинное» значение. В этом случае fn возвращает результат передачи своих аргументов соответствующему преобразователю. Если ни один предикат не совпадает, fn возвращает undefined.
Обратите внимание: Это не прямая замена инструкции switch. Помните, что оба элемента каждой пары, переданной в cond, являются функциями, а cond возвращает функцию.
См. также ifElse, unless, when.
const fn = R.cond([
[R.equals(0), R.always('water freezes at 0°C')],
[R.equals(100), R.always('water boils at 100°C')],
[R.T, temp => 'nothing special happens at ' + temp + '°C']
]);
fn(0); //=> 'water freezes at 0°C'
fn(50); //=> 'nothing special happens at 50°C'
fn(100); //=> 'water boils at 100°C' construct Добавлена в v0.1.0
(* → {*}) → (* → {*}) Параметры
-
fnФункция-конструктор, которую нужно обернуть.
Возвращает
- function Обернутую каррированную функцию-конструктор.
Обертывает функцию-конструктор каррированной функцией, которую можно вызвать с теми же аргументами и которая возвращает значение того же типа.
См. также invoker.
// Constructor function
function Animal(kind) {
this.kind = kind;
};
Animal.prototype.sighting = function() {
return "It's a " + this.kind + "!";
}
const AnimalConstructor = R.construct(Animal)
// Notice we no longer need the 'new' keyword:
AnimalConstructor('Pig'); //=> {"kind": "Pig", "sighting": function (){...}};
const animalTypes = ["Lion", "Tiger", "Bear"];
const animalSighting = R.invoker(0, 'sighting');
const sightNewAnimal = R.compose(animalSighting, AnimalConstructor);
R.map(sightNewAnimal, animalTypes); //=> ["It's a Lion!", "It's a Tiger!", "It's a Bear!"] constructN Добавлена в v0.4.0
Number → (* → {*}) → (* → {*}) Параметры
-
nАрность функции-конструктора.
-
FnФункция-конструктор, которую нужно обернуть.
Возвращает
- function Обернутую каррированную функцию-конструктор.
Обертывает функцию-конструктор каррированной функцией, которую можно вызвать с теми же аргументами и которая возвращает значение того же типа. Арность возвращаемой функции задаётся, чтобы можно было использовать функции-конструкторы с переменным числом аргументов.
// Variadic Constructor function
function Salad() {
this.ingredients = arguments;
}
Salad.prototype.recipe = function() {
const instructions = R.map(ingredient => 'Add a dollop of ' + ingredient, this.ingredients);
return R.join('\n', instructions);
};
const ThreeLayerSalad = R.constructN(3, Salad);
// Notice we no longer need the 'new' keyword, and the constructor is curried for 3 arguments.
const salad = ThreeLayerSalad('Mayonnaise')('Potato Chips')('Ketchup');
console.log(salad.recipe());
// Add a dollop of Mayonnaise
// Add a dollop of Potato Chips
// Add a dollop of Ketchup converge Добавлена в v0.4.2
((x1, x2, …) → z) → [((a, b, …) → x1), ((a, b, …) → x2), …] → (a → b → … → z)
Параметры
-
afterФункция.
afterбудет вызвана с возвращаемыми значениямиfn1иfn2в качестве аргументов. -
functionsСписок функций.
Возвращает
- function Новую функцию.
Принимает объединяющую функцию и список ветвящихся функций и возвращает новую функцию. Арность новой функции совпадает с арностью самой длинной ветвящейся функции. При вызове новая функция получает аргументы, и каждая ветвящаяся функция вызывается с теми же аргументами. Результаты ветвящихся функций передаются объединяющей функции в качестве аргументов, чтобы получить возвращаемое значение.
См. также useWith.
const average = R.converge(R.divide, [R.sum, R.length])
average([1, 2, 3, 4, 5, 6, 7]) //=> 4
const strangeConcat = R.converge(R.concat, [R.toUpper, R.toLower])
strangeConcat("Yodel") //=> "YODELyodel" count Добавлена в v0.28.0
(a → Boolean) → [a] → Number
Параметры
-
predicateФункция для проверки элементов.
-
listСписок, в котором нужно подсчитать элементы.
Возвращает
- Number Количество элементов, удовлетворяющих предикату.
Возвращает количество элементов в заданном list, удовлетворяющих предикату f
const even = x => x % 2 == 0; R.count(even, [1, 2, 3, 4, 5]); // => 2 R.map(R.count(even), [[1, 1, 1], [2, 3, 4, 5], [6]]); // => [0, 2, 1]
countBy Добавлена в v0.1.0
(a → String) → [a] → {*} Параметры
-
fnФункция для сопоставления значений ключам.
-
listСписок, в котором нужно подсчитать элементы.
Возвращает
- Object Объект, сопоставляющий ключи количеству их вхождений в список.
Подсчитывает элементы списка в соответствии с количеством элементов, соответствующих каждому значению ключа, созданному переданной функцией. Возвращает объект, сопоставляющий ключи, созданные fn, количеству их вхождений в список. Обратите внимание: все ключи преобразуются в строки в соответствии с особенностями работы объектов JavaScript.
Работает как трансдьюсер, если на месте списка передан трансформер.
const numbers = [1.0, 1.1, 1.2, 2.0, 3.0, 2.2];
R.countBy(Math.floor)(numbers); //=> {'1': 3, '2': 2, '3': 1}
const letters = ['a', 'b', 'A', 'a', 'B', 'c'];
R.countBy(R.toLower)(letters); //=> {'a': 3, 'b': 2, 'c': 1} curry Добавлена в v0.1.0
(* → a) → (* → a)
Параметры
-
fnФункция для каррирования.
Возвращает
- function Новую каррированную функцию.
Возвращает каррированный эквивалент переданной функции. Каррированная функция обладает двумя необычными возможностями. Во-первых, её аргументы необязательно передавать по одному. Если f — функция с тремя аргументами, а g — R.curry(f), следующие варианты эквивалентны:
g(1)(2)(3)g(1)(2, 3)g(1, 2)(3)g(1, 2, 3)
Во-вторых, специальное значение-заполнитель R.__ можно использовать для обозначения «пропусков», что позволяет частично применять любую комбинацию аргументов независимо от их позиции. Если g — функция, указанная выше, а _ — R.__, следующие варианты эквивалентны:
g(1, 2, 3)g(_, 2, 3)(1)g(_, _, 3)(1)(2)g(_, _, 3)(1, 2)g(_, 2)(1)(3)g(_, 2)(1, 3)g(_, 2)(_, 3)(1)
Обратите внимание: параметры по умолчанию не учитываются в арности функции, поэтому curry будет работать с ними некорректно.
const addFourNumbers = (a, b, c, d) => a + b + c + d; const curriedAddFourNumbers = R.curry(addFourNumbers); const f = curriedAddFourNumbers(1, 2); const g = f(3); g(4); //=> 10 // R.curry not working well with default parameters const h = R.curry((a, b, c = 2) => a + b + c); h(1)(2)(7); //=> Error! (`3` is not a function!)
curryN Добавлена в v0.5.0
Number → (* → a) → (* → a)
Параметры
-
lengthАрность возвращаемой функции.
-
fnФункция для каррирования.
Возвращает
- function Новую каррированную функцию.
Возвращает каррированный эквивалент переданной функции с заданной арностью. Каррированная функция обладает двумя необычными возможностями. Во-первых, её аргументы необязательно передавать по одному. Если g — R.curryN(3, f), следующие варианты эквивалентны:
g(1)(2)(3)g(1)(2, 3)g(1, 2)(3)g(1, 2, 3)
Во-вторых, специальное значение-заполнитель R.__ можно использовать для обозначения «пропусков», что позволяет частично применять любую комбинацию аргументов независимо от их позиции. Если g — функция, указанная выше, а _ — R.__, следующие варианты эквивалентны:
g(1, 2, 3)g(_, 2, 3)(1)g(_, _, 3)(1)(2)g(_, _, 3)(1, 2)g(_, 2)(1)(3)g(_, 2)(1, 3)g(_, 2)(_, 3)(1)
См. также curry.
const sumArgs = (...args) => R.sum(args); const curriedAddFourNumbers = R.curryN(4, sumArgs); const f = curriedAddFourNumbers(1, 2); const g = f(3); g(4); //=> 10
dec Добавлена в v0.9.0
Number → Number
Параметры
-
n
Возвращает
- Number n - 1
Уменьшает значение аргумента на единицу.
См. также inc.
R.dec(42); //=> 41
defaultTo Добавлена в v0.10.0
a → b → a | b
Параметры
-
defaultЗначение по умолчанию.
-
valВместо
defaultбудет возвращеноval, если толькоvalне равноnull,undefinedилиNaN.
Возвращает
- * Второе значение, если оно не равно `null`, `undefined` или `NaN`; в противном случае — значение по умолчанию
Возвращает второй аргумент, если он не равен null, undefined или NaN; в противном случае возвращается первый аргумент.
const defaultTo42 = R.defaultTo(42);
defaultTo42(null); //=> 42
defaultTo42(undefined); //=> 42
defaultTo42(false); //=> false
defaultTo42('Ramda'); //=> 'Ramda'
// parseInt('string') results in NaN
defaultTo42(parseInt('string')); //=> 42 descend Добавлена в v0.23.0
Ord b => (a → b) → a → a → Number
Параметры
-
fnФункция с арностью 1, возвращающая значение, которое можно сравнить
-
aПервый сравниваемый элемент.
-
bВторой сравниваемый элемент.
Возвращает
- Number `-1`, если fn(a) > fn(b); `1`, если fn(b) > fn(a); иначе `0`
Создаёт компаратор для сортировки по убыванию на основе функции, возвращающей значение, которое можно сравнить с помощью < и >.
См. также ascend, descendNatural, ascendNatural.
const byAge = R.descend(R.prop('age'));
const people = [
{ name: 'Emma', age: 70 },
{ name: 'Peter', age: 78 },
{ name: 'Mikhail', age: 62 },
];
const peopleByOldestFirst = R.sort(byAge, people);
//=> [{ name: 'Peter', age: 78 }, { name: 'Emma', age: 70 }, { name: 'Mikhail', age: 62 }] descendNatural Добавлена в v0.30.1
s → (a → String) → a → a → Number
Параметры
-
localesСтрока с языковой меткой BCP 47 или массив таких строк. Соответствует параметру locales конструктора Intl.Collator().
-
fnФункция с арностью 1, возвращающая строку, которую можно сравнить
-
aПервый сравниваемый элемент.
-
bВторой сравниваемый элемент.
Возвращает
- Number `-1`, если a располагается после b; `1`, если a располагается перед b; иначе `0`
Создаёт компаратор для сортировки строк по убыванию на основе функции, возвращающей значение, которое можно сравнить с помощью естественной сортировки и localeCompare.
См. также descend.
const unsorted = ['3', '1', '10', 'Ørjan', 'Bob', 'Älva'];
R.sort(R.descendNatural('en', R.identity), unsorted);
// => ['Ørjan', 'Bob', 'Älva', '10', '3', '1']
R.sort(R.descendNatural('sv', R.identity), unsorted);
// => ['Ørjan', 'Älva', 'Bob', '10', '3', '1']
R.sort(R.descend(R.identity), unsorted);
// => ['Ørjan', 'Älva', 'Bob', '3', '10', '1'] difference Добавлена в v0.1.0
[*] → [*] → [*]
Параметры
-
list1Первый список.
-
list2Второй список.
Возвращает
- Array Элементы `list1`, которых нет в `list2`.
Находит множество (то есть без дубликатов) всех элементов первого списка, отсутствующих во втором. Объекты и массивы сравниваются по равенству значений, а не по ссылкам.
См. также differenceWith, symmetricDifference, symmetricDifferenceWith, without.
R.difference([1,2,3,4], [7,6,5,4,3]); //=> [1,2]
R.difference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5]
R.difference([{a: 1}, {b: 2}], [{a: 1}, {c: 3}]) //=> [{b: 2}] differenceWith Добавлена в v0.1.0
((a, a) → Boolean) → [a] → [a] → [a]
Параметры
-
predПредикат для проверки равенства двух элементов.
-
list1Первый список.
-
list2Второй список.
Возвращает
- Array Элементы `list1`, которых нет в `list2`.
Находит множество (то есть без дубликатов) всех элементов первого списка, отсутствующих во втором. Наличие дубликатов определяется значением, возвращаемым при передаче двух элементов списка заданному предикату.
См. также difference, symmetricDifference, symmetricDifferenceWith.
const cmp = (x, y) => x.a === y.a;
const l1 = [{a: 1}, {a: 2}, {a: 3}];
const l2 = [{a: 3}, {a: 4}];
R.differenceWith(cmp, l1, l2); //=> [{a: 1}, {a: 2}]
R.differenceWith(R.equals, [1, 2, 3, 3, 3], []); //=> [1, 2, 3]
R.differenceWith(R.equals, [1, 2, 3, 3, 3], [1]); //=> [2, 3] dissoc Добавлена в v0.10.0
String → {k: v} → {k: v} Параметры
-
propИмя свойства, которое нужно исключить
-
objОбъект для клонирования
Возвращает
- Object Новый объект, эквивалентный исходному, но без указанного свойства
Возвращает новый объект, не содержащий свойство prop.
R.dissoc('b', {a: 1, b: 2, c: 3}); //=> {a: 1, c: 3} dissocPath Добавлена в v0.11.0
[Idx] → {k: v} → {k: v} Idx = String | Int | SymbolПараметры
-
pathПуть к значению, которое нужно исключить
-
objОбъект для клонирования
Возвращает
- Object Новый объект без свойства по указанному пути
Создаёт поверхностную копию объекта, исключая свойство по указанному пути. Обратите внимание: свойства прототипа также копируются и переносятся в новый объект. Все непримитивные свойства копируются по ссылке.
См. также assocPath.
R.dissocPath(['a', 'b', 'c'], {a: {b: {c: 42}}}); //=> {a: {b: {}}} divide Добавлена в v0.1.0
Number → Number → Number
Параметры
-
aПервое значение.
-
bВторое значение.
Возвращает
- Number Результат `a / b`.
Делит два числа. Эквивалентно a / b.
См. также multiply.
R.divide(71, 100); //=> 0.71 const half = R.divide(R.__, 2); half(42); //=> 21 const reciprocal = R.divide(1); reciprocal(4); //=> 0.25
drop Добавлена в v0.1.0
Number → [a] → [a]
Number → String → StringПараметры
-
n -
list
Возвращает
- * Копию списка без первых `n` элементов
Возвращает все элементы заданного списка, строки или трансдьюсера/трансформера (либо объекта с методом drop), кроме первых n.
Выполняет диспетчеризацию на метод drop второго аргумента, если он имеется.
См. также take, transduce, dropLast, dropWhile.
R.drop(1, ['foo', 'bar', 'baz']); //=> ['bar', 'baz'] R.drop(2, ['foo', 'bar', 'baz']); //=> ['baz'] R.drop(3, ['foo', 'bar', 'baz']); //=> [] R.drop(4, ['foo', 'bar', 'baz']); //=> [] R.drop(3, 'ramda'); //=> 'da'
dropLast Добавлена в v0.16.0
Number → [a] → [a]
Number → String → StringПараметры
-
nКоличество элементов
list, которые нужно пропустить. -
listСписок рассматриваемых элементов.
Возвращает
- Array Копию списка, содержащую только первые `list.length - n` элементов
Возвращает список, содержащий все элементы заданного list, кроме последних n.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также takeLast, drop, dropWhile, dropLastWhile.
R.dropLast(1, ['foo', 'bar', 'baz']); //=> ['foo', 'bar'] R.dropLast(2, ['foo', 'bar', 'baz']); //=> ['foo'] R.dropLast(3, ['foo', 'bar', 'baz']); //=> [] R.dropLast(4, ['foo', 'bar', 'baz']); //=> [] R.dropLast(3, 'ramda'); //=> 'ra'
dropLastWhile Добавлена в v0.16.0
(a → Boolean) → [a] → [a]
(a → Boolean) → String → StringПараметры
-
predicateФункция, вызываемая для каждого элемента
-
xsКоллекция для перебора.
Возвращает
- Array Новый массив без завершающих элементов, для которых предикат возвращает `falsy`.
Возвращает новый список, исключая все конечные элементы заданного списка, удовлетворяющие переданной функции-предикату. Передаёт каждое значение справа налево функции-предикату и пропускает элементы, пока функция-предикат не вернёт значение falsy. Функция-предикат применяется к одному аргументу: (value).
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также takeLastWhile, addIndex, drop, dropWhile.
const lteThree = x => x <= 3; R.dropLastWhile(lteThree, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3, 4] R.dropLastWhile(x => x !== 'd' , 'Ramda'); //=> 'Ramd'
dropRepeats Добавлена в v0.14.0
[a] → [a]
Параметры
-
listРассматриваемый массив.
Возвращает
- Array `list` без повторяющихся элементов.
Возвращает новый список без последовательно повторяющихся элементов. Для проверки равенства используется R.equals.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также transduce.
R.dropRepeats([1, 1, 1, 2, 3, 4, 4, 2, 2]); //=> [1, 2, 3, 4, 2]
dropRepeatsBy Добавлена в v0.29.0
(a → b) → [a] → [a]
Параметры
-
fnФункция, создающая значение для сравнения.
-
listРассматриваемый массив.
Возвращает
- Array `list` без повторяющихся элементов.
Возвращает новый список без последовательно повторяющихся элементов на основе значения, возвращаемого при применении переданной функции к каждому элементу списка. Для проверки равенства используется R.equals.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также transduce.
R.dropRepeatsBy(Math.abs, [1, -1, -1, 2, 3, -4, 4, 2, 2]); //=> [1, 2, 3, -4, 2]
dropRepeatsWith Добавлена в v0.14.0
((a, a) → Boolean) → [a] → [a]
Параметры
-
predПредикат для проверки равенства двух элементов.
-
listРассматриваемый массив.
Возвращает
- Array `list` без повторяющихся элементов.
Возвращает новый список без последовательно повторяющихся элементов. Равенство определяется применением переданного предиката к каждой паре соседних элементов. Первый элемент в последовательности равных элементов сохраняется.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также transduce.
const l = [1, -1, 1, 3, 4, -4, -4, -5, 5, 3, 3]; R.dropRepeatsWith(R.eqBy(Math.abs), l); //=> [1, 3, 4, -5, 3]
dropWhile Добавлена в v0.9.0
(a → Boolean) → [a] → [a]
(a → Boolean) → String → StringПараметры
-
fnФункция, вызываемая на каждой итерации.
-
xsКоллекция для перебора.
Возвращает
- Array Новый массив.
Возвращает новый список, исключая начальные элементы заданного списка, удовлетворяющие переданной функции-предикату. Передаёт каждое значение функции-предикату и пропускает элементы, пока функция-предикат возвращает true. Функция-предикат применяется к одному аргументу: (value).
Выполняет диспетчеризацию на метод dropWhile второго аргумента, если он имеется.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также takeWhile, transduce, addIndex.
const lteTwo = x => x <= 2; R.dropWhile(lteTwo, [1, 2, 3, 4, 3, 2, 1]); //=> [3, 4, 3, 2, 1] R.dropWhile(x => x !== 'd' , 'Ramda'); //=> 'da'
either Добавлена в v0.12.0
(*… → Boolean) → (*… → Boolean) → (*… → Boolean)
Параметры
-
fпредикат
-
gдругой предикат
Возвращает
- function функцию, которая передаёт свои аргументы функциям `f` и `g`, а затем объединяет их результаты с помощью `||`.
Функция, оборачивающая вызовы двух функций в операцию || и возвращающая результат первой функции, если он истинный, а в противном случае — результат второй функции. Обратите внимание: операция выполняется с коротким замыканием, то есть вторая функция не вызывается, если первая возвращает истинное значение.
Помимо функций, R.either также принимает любой аппликативный функтор, совместимый с fantasy-land.
const gt10 = x => x > 10; const even = x => x % 2 === 0; const f = R.either(gt10, even); f(101); //=> true f(8); //=> true R.either(Maybe.Just(false), Maybe.Just(55)); // => Maybe.Just(55) R.either([false, false, 'a'], [11]) // => [11, 11, "a"]
empty Добавлена в v0.3.0
a → a
Параметры
-
x
Возвращает
- *
Возвращает пустое значение типа аргумента. Ramda определяет пустое значение для Array ([]), Object ({}), String (''), Map (new Map()), Set (new Set()), TypedArray (Uint8Array [], Float32Array [] и т. д.) и Arguments. Поддерживаются и другие типы, если они определяют <Type>.empty, <Type>.prototype.empty или реализуют спецификацию FantasyLand Monoid.
Выполняет диспетчеризацию на метод empty первого аргумента, если он имеется.
R.empty(Just(42)); //=> Nothing()
R.empty([1, 2, 3]); //=> []
R.empty('unicorns'); //=> ''
R.empty({x: 1, y: 2}); //=> {}
R.empty(Uint8Array.from('123')); //=> Uint8Array []
R.empty(Set); //=> Set() endsWith Добавлена в v0.24.0
[a] → [a] → Boolean
String → String → BooleanПараметры
-
suffix -
list
Возвращает
- Boolean
Проверяет, заканчивается ли список заданным подсписком.
Аналогично проверяет, заканчивается ли строка заданной подстрокой.
См. также startsWith.
R.endsWith('c', 'abc') //=> true
R.endsWith('b', 'abc') //=> false
R.endsWith(['c'], ['a', 'b', 'c']) //=> true
R.endsWith(['b'], ['a', 'b', 'c']) //=> false eqBy Добавлена в v0.18.0
(a → b) → a → a → Boolean
Параметры
-
f -
x -
y
Возвращает
- Boolean
Принимает функцию и два значения из её области определения и возвращает true, если оба значения отображаются в одно и то же значение области значений; в противном случае возвращает false.
R.eqBy(Math.abs, 5, -5); //=> true
eqProps Добавлена в v0.1.0
k → {k: v} → {k: v} → Boolean Параметры
-
propИмя сравниваемого свойства
-
obj1 -
obj2
Возвращает
- Boolean
Проверяет, имеют ли два объекта одинаковое значение указанного свойства согласно правилам R.equals. Удобно использовать как каррированный предикат.
const o1 = { a: 1, b: 2, c: 3, d: 4 };
const o2 = { a: 10, b: 20, c: 3, d: 40 };
R.eqProps('a', o1, o2); //=> false
R.eqProps('c', o1, o2); //=> true equals Добавлена в v0.15.0
a → b → Boolean
Параметры
-
a -
b
Возвращает
- Boolean
Возвращает true, если аргументы эквивалентны, и false в противном случае. Обрабатывает циклические структуры данных.
Симметрично выполняет диспетчеризацию на методы equals обоих аргументов, если они имеются.
R.equals(1, 1); //=> true
R.equals(1, '1'); //=> false
R.equals([1, 2, 3], [1, 2, 3]); //=> true
const a = {}; a.v = a;
const b = {}; b.v = b;
R.equals(a, b); //=> true evolve Добавлена в v0.9.0
{k: (v → v)} → {k: v} → {k: v} Параметры
-
transformationsОбъект, задающий функции преобразования, которые нужно применить к объекту.
-
objectПреобразуемый объект.
Возвращает
- Object Преобразованный объект.
Создаёт новый объект, рекурсивно преобразуя поверхностную копию object в соответствии с функциями transformation. Все непримитивные свойства копируются по ссылке.
Функция transformation не будет вызвана, если соответствующий ей ключ отсутствует в преобразуемом объекте.
const tomato = {firstName: ' Tomato ', data: {elapsed: 100, remaining: 1400}, id:123};
const transformations = {
firstName: R.trim,
lastName: R.trim, // Will not get invoked.
data: {elapsed: R.add(1), remaining: R.add(-1)}
};
R.evolve(transformations, tomato); //=> {firstName: 'Tomato', data: {elapsed: 101, remaining: 1399}, id:123} F Добавлена в v0.9.0
* → Boolean
Параметры
Возвращает
- Boolean
Функция, всегда возвращающая false. Все переданные параметры игнорируются.
См. также T.
R.F(); //=> false
filter Добавлена в v0.1.0
Filterable f => (a → Boolean) → f a → f a
Параметры
-
pred -
filterable
Возвращает
- Array Фильтруемый объект
Принимает предикат и Filterable и возвращает новый фильтруемый объект того же типа, содержащий элементы заданного фильтруемого объекта, удовлетворяющие предикату. К фильтруемым объектам относятся обычные объекты, Map и любые объекты с методом filter, например Array.
Выполняет диспетчеризацию на метод filter второго аргумента, если он имеется.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также reject, transduce, addIndex.
const isEven = n => n % 2 === 0;
R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]
R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4} find Добавлена в v0.1.0
(a → Boolean) → [a] → a | undefined
Параметры
-
fnФункция-предикат, используемая для определения того, является ли элемент нужным.
-
listРассматриваемый массив.
Возвращает
- Object Найденный элемент или `undefined`.
Возвращает первый элемент списка, соответствующий предикату, или undefined, если соответствующих элементов нет.
Если метод присутствует, вызывает метод find второго аргумента.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также transduce.
const xs = [{a: 1}, {a: 2}, {a: 3}];
R.find(R.propEq(2, 'a'))(xs); //=> {a: 2}
R.find(R.propEq(4, 'a'))(xs); //=> undefined findIndex Добавлено в v0.1.1
(a → Boolean) → [a] → Number
Параметры
-
fnФункция-предикат, используемая для определения того, является ли элемент нужным.
-
listРассматриваемый массив.
Возвращает
- Number Индекс найденного элемента или `-1`.
Возвращает индекс первого элемента списка, соответствующего предикату, или -1, если соответствующих элементов нет.
Работает как трансдьюсер, если на месте списка передан трансформер.
const xs = [{a: 1}, {a: 2}, {a: 3}];
R.findIndex(R.propEq(2, 'a'))(xs); //=> 1
R.findIndex(R.propEq(4, 'a'))(xs); //=> -1 findLast Добавлено в v0.1.1
(a → Boolean) → [a] → a | undefined
Параметры
-
fnФункция-предикат, используемая для определения того, является ли элемент нужным.
-
listРассматриваемый массив.
Возвращает
- Object Найденный элемент или `undefined`.
Возвращает последний элемент списка, соответствующий предикату, или undefined, если соответствующих элементов нет.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также transduce.
const xs = [{a: 1, b: 0}, {a:1, b: 1}];
R.findLast(R.propEq(1, 'a'))(xs); //=> {a: 1, b: 1}
R.findLast(R.propEq(4, 'a'))(xs); //=> undefined findLastIndex Добавлено в v0.1.1
(a → Boolean) → [a] → Number
Параметры
-
fnФункция-предикат, используемая для определения того, является ли элемент нужным.
-
listРассматриваемый массив.
Возвращает
- Number Индекс найденного элемента или `-1`.
Возвращает индекс последнего элемента списка, соответствующего предикату, или -1, если соответствующих элементов нет.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также transduce, lastIndexOf.
const xs = [{a: 1, b: 0}, {a:1, b: 1}];
R.findLastIndex(R.propEq(1, 'a'))(xs); //=> 1
R.findLastIndex(R.propEq(4, 'a'))(xs); //=> -1 flatten Добавлено в v0.1.0
[a] → [b]
Параметры
-
listРассматриваемый массив.
Возвращает
- Array Список без вложенных массивов.
Создает новый список, извлекая из исходного каждый элемент (а также элементы всех его вложенных массивов) и добавляя их в новый массив в порядке обхода в глубину.
См. также unnest.
R.flatten([1, 2, [3, 4], 5, [6, [7, 8, [9, [10, 11], 12]]]]); //=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
flip Добавлено в v0.1.0
((a, b, c, …) → z) → (b → a → c → … → z)
Параметры
-
fnФункция, которую нужно вызвать, поменяв местами первые два аргумента.
Возвращает
- * Результат вызова `fn` с переставленными местами первыми двумя аргументами.
Возвращает новую функцию, похожую на переданную, но с переставленными местами первыми двумя аргументами.
const mergeThree = (a, b, c) => [].concat(a, b, c); mergeThree(1, 2, 3); //=> [1, 2, 3] R.flip(mergeThree)(1, 2, 3); //=> [2, 1, 3]
flow Добавлено в v0.30.0
a → [(a → b), …, (y → z)] → z
Параметры
-
aНачальное значение
-
pipelineФункции, образующие конвейер
Возвращает
- * z Результат применения начального значения к конвейеру функций
Принимает значение выражения и передает его функции, которая представляет собой последовательную композицию функций из второго аргумента слева направо.
Функции в конвейере должны быть унарными.
flow помогает избежать создания дополнительной функции с именованными аргументами для вычисления результата конвейера функций, зависящего от заданных начальных значений. Вместо того чтобы определять референциально прозрачную функцию f = (_x, _y) => R.pipe(g(_x), h(_y), …), которая понадобится позднее, только после z = f(x, y), можно обойтись без введения f, _x и _y: z = flow(x, [g, h(y),…]
В некоторых библиотеках эта функция называется pipe.
См. также pipe.
R.flow(9, [Math.sqrt, R.negate, R.inc]); //=> -2
const personObj = { first: 'Jane', last: 'Doe' };
const fullName = R.flow(personObj, [R.values, R.join(' ')]); //=> "Jane Doe"
const givenName = R.flow(' ', [R.trim, R.when(R.isEmpty, R.always(fullName))]); //=> "Jane Doe" forEach Добавлено в v0.1.1
(a → *) → [a] → [a]
Параметры
-
fnФункция для вызова. Получает один аргумент:
value. -
listСписок для перебора.
Возвращает
- Array Исходный список.
Перебирает входной list, вызывая переданную функцию fn для каждого элемента списка.
fn получает один аргумент: (value).
Примечание: R.forEach не пропускает удаленные или не присвоенные индексы (разреженные массивы), в отличие от встроенного метода Array.prototype.forEach. Подробнее об этом поведении см. здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Description
Также обратите внимание, что в отличие от Array.prototype.forEach, функция forEach из Ramda возвращает исходный массив. В некоторых библиотеках эта функция называется each.
Если метод присутствует, вызывает метод forEach второго аргумента.
См. также addIndex.
const printXPlusFive = x => console.log(x + 5); R.forEach(printXPlusFive, [1, 2, 3]); //=> [1, 2, 3] // logs 6 // logs 7 // logs 8
forEachObjIndexed Добавлено в v0.23.0
((a, String, StrMap a) → Any) → StrMap a → StrMap a
Параметры
-
fnФункция для вызова. Получает три аргумента:
value,key,obj. -
objОбъект для перебора.
Возвращает
- Object Исходный объект.
Перебирает входной object, вызывая переданную функцию fn для каждого ключа и значения объекта.
fn получает три аргумента: (value, key, obj).
const printKeyConcatValue = (value, key) => console.log(key + ':' + value);
R.forEachObjIndexed(printKeyConcatValue, {x: 1, y: 2}); //=> {x: 1, y: 2}
// logs x:1
// logs y:2 fromPairs Добавлено в v0.3.0
[[k,v]] → {k: v} Параметры
-
pairsМассив двухэлементных массивов, которые станут ключами и значениями выходного объекта.
Возвращает
- Object Объект, созданный путем объединения `keys` и `values` в пары.
Создает новый объект из списка пар «ключ-значение». Если ключ встречается в нескольких парах, в объект включается пара, расположенная правее.
R.fromPairs([['a', 1], ['b', 2], ['c', 3]]); //=> {a: 1, b: 2, c: 3} groupBy Добавлено в v0.1.0
Idx a => (b → a) → [b] → {a: [b]} Idx = String | Int | SymbolПараметры
-
fnФункция :: a -> Idx
-
listМассив для группировки
Возвращает
- Object Объект, в котором ключами являются результаты вызова `fn`, а значениями — массивы элементов, для которых вызов `fn` вернул соответствующий ключ.
Разбивает список на подсписки, хранящиеся в объекте. Для этого вызывает для каждого элемента функцию, возвращающую ключ, и группирует элементы по полученным значениям.
Если метод присутствует, вызывает метод groupBy второго аргумента.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также reduceBy, transduce, indexBy, collectBy.
const byGrade = R.groupBy(function(student) {
const score = student.score;
return score < 65 ? 'F' :
score < 70 ? 'D' :
score < 80 ? 'C' :
score < 90 ? 'B' : 'A';
});
const students = [{name: 'Abby', score: 84},
{name: 'Eddy', score: 58},
// ...
{name: 'Jack', score: 69}];
byGrade(students);
// {
// 'A': [{name: 'Dianne', score: 99}],
// 'B': [{name: 'Abby', score: 84}]
// // ...,
// 'F': [{name: 'Eddy', score: 58}]
// } groupWith Добавлено в v0.21.0
((a, a) → Boolean) → [a] → [[a]]
Параметры
-
fnФункция, определяющая, должны ли два заданных (соседних) элемента входить в одну группу
-
listМассив для группировки. Также принимает строку, которая будет рассматриваться как список символов.
Возвращает
- List Список подсписков элементов, конкатенация которых равна исходному списку.
Принимает список и возвращает список списков, в каждом из которых все элементы попарно удовлетворяют условию, заданному переданной функцией. Функции сравнения передаются только соседние элементы.
R.groupWith(R.equals, [0, 1, 1, 2, 3, 5, 8, 13, 21]) //=> [[0], [1, 1], [2], [3], [5], [8], [13], [21]] R.groupWith((a, b) => a + 1 === b, [0, 1, 1, 2, 3, 5, 8, 13, 21]) //=> [[0, 1], [1, 2, 3], [5], [8], [13], [21]] R.groupWith((a, b) => a % 2 === b % 2, [0, 1, 1, 2, 3, 5, 8, 13, 21]) //=> [[0], [1, 1], [2], [3, 5], [8], [13, 21]] const isVowel = R.test(/^[aeiou]$/i); R.groupWith(R.eqBy(isVowel), 'aestiou') //=> ['ae', 'st', 'iou']
gt Добавлено в v0.1.0
Ord a => a → a → Boolean
Параметры
-
a -
b
Возвращает
- Boolean
Возвращает true, если первый аргумент больше второго; в противном случае — false.
См. также lt.
R.gt(2, 1); //=> true
R.gt(2, 2); //=> false
R.gt(2, 3); //=> false
R.gt('a', 'z'); //=> false
R.gt('z', 'a'); //=> true gte Добавлено в v0.1.0
Ord a => a → a → Boolean
Параметры
-
a -
b
Возвращает
- Boolean
Возвращает true, если первый аргумент больше второго или равен ему; в противном случае — false.
См. также lte.
R.gte(2, 1); //=> true
R.gte(2, 2); //=> true
R.gte(2, 3); //=> false
R.gte('a', 'z'); //=> false
R.gte('z', 'a'); //=> true has Добавлено в v0.7.0
s → {s: x} → Boolean Параметры
-
propИмя свойства, наличие которого нужно проверить.
-
objОбъект для проверки.
Возвращает
- Boolean Наличие свойства.
Возвращает значение, указывающее, есть ли у объекта собственное свойство с указанным именем.
const hasName = R.has('name');
hasName({name: 'alice'}); //=> true
hasName({name: 'bob'}); //=> true
hasName({}); //=> false
const point = {x: 0, y: 0};
const pointHas = R.has(R.__, point);
pointHas('x'); //=> true
pointHas('y'); //=> true
pointHas('z'); //=> false hasIn Добавлено в v0.7.0
s → {s: x} → Boolean Параметры
-
propИмя свойства, наличие которого нужно проверить.
-
objОбъект для проверки.
Возвращает
- Boolean Наличие свойства.
Возвращает значение, указывающее, есть ли у объекта или в его цепочке прототипов свойство с указанным именем.
function Rectangle(width, height) {
this.width = width;
this.height = height;
}
Rectangle.prototype.area = function() {
return this.width * this.height;
};
const square = new Rectangle(2, 2);
R.hasIn('width', square); //=> true
R.hasIn('area', square); //=> true hasPath Добавлено в v0.26.0
[Idx] → {a} → Boolean Idx = String | Int | SymbolПараметры
-
pathИспользуемый путь.
-
objОбъект, в котором проверяется путь.
Возвращает
- Boolean Наличие пути.
Возвращает значение, указывающее, существует ли путь в объекте. Проверяются только собственные свойства объекта.
См. также has.
R.hasPath(['a', 'b'], {a: {b: 2}}); // => true
R.hasPath(['a', 'b'], {a: {b: undefined}}); // => true
R.hasPath(['a', 'b'], {a: {c: 2}}); // => false
R.hasPath(['a', 'b'], {}); // => false head Добавлено в v0.1.0
[a] → a | Undefined
String → String | UndefinedПараметры
-
list
Возвращает
- *
Возвращает первый элемент заданного списка или строки. В некоторых библиотеках эта функция называется first.
R.head(['fi', 'fo', 'fum']); //=> 'fi'
R.head([]); //=> undefined
R.head('abc'); //=> 'a'
R.head(''); //=> undefined identical Добавлено в v0.15.0
a → a → Boolean
Параметры
-
a -
b
Возвращает
- Boolean
Возвращает true, если аргументы идентичны, и false в противном случае. Значения идентичны, если они ссылаются на одну и ту же область памяти. NaN идентичен NaN; 0 и -0 не идентичны.
Обратите внимание: это всего лишь каррированная версия Object.is из ES6.
identical не поддерживает заполнитель __.
const o = {};
R.identical(o, o); //=> true
R.identical(1, 1); //=> true
R.identical(1, '1'); //=> false
R.identical([], []); //=> false
R.identical(0, -0); //=> false
R.identical(NaN, NaN); //=> true identity Добавлено в v0.1.0
a → a
Параметры
-
xВозвращаемое значение.
Возвращает
- * Входное значение `x`.
Функция, которая просто возвращает переданный ей параметр. Подходит в качестве функции по умолчанию или функции-заполнителя.
R.identity(1); //=> 1
const obj = {};
R.identity(obj) === obj; //=> true ifElse Добавлено в v0.8.0
(*… → Boolean) → (*… → *) → (*… → *) → (*… → *)
Параметры
-
conditionФункция-предикат
-
onTrueФункция, вызываемая, если
conditionвозвращает истинное значение. -
onFalseФункция, вызываемая, если
conditionвозвращает ложное значение.
Возвращает
- function Новая функция, которая вызывает либо функцию `onTrue`, либо функцию `onFalse` в зависимости от результата предиката `condition`.
Создает функцию, которая вызывает либо функцию onTrue, либо функцию onFalse в зависимости от результата предиката condition.
Обратите внимание: ifElse получает арность, равную наибольшей арности из трех переданных ей функций.
const incCount = R.ifElse(
R.has('count'),
R.over(R.lensProp('count'), R.inc),
R.assoc('count', 1)
);
incCount({ count: 1 }); //=> { count: 2 }
incCount({}); //=> { count: 1 } inc Добавлено в v0.9.0
Number → Number
Параметры
-
n
Возвращает
- Number n + 1
Увеличивает свой аргумент на единицу.
См. также dec.
R.inc(42); //=> 43
includes Добавлено в v0.26.0
a → [a] → Boolean
Параметры
-
aЭлемент для сравнения.
-
listРассматриваемый массив.
Возвращает
- Boolean `true`, если в списке есть эквивалентный элемент, и `false` в противном случае.
Возвращает true, если указанное значение равно хотя бы одному элементу заданного списка в смысле R.equals; в противном случае возвращает false. Работает также со строками.
См. также any.
R.includes(3, [1, 2, 3]); //=> true
R.includes(4, [1, 2, 3]); //=> false
R.includes({ name: 'Fred' }, [{ name: 'Fred' }]); //=> true
R.includes([42], [[42]]); //=> true
R.includes('ba', 'banana'); //=>true indexBy Добавлено в v0.19.0
Idx a => (b → a) → [b] → {a: b} Idx = String | Int | SymbolПараметры
-
fnФункция :: a -> Idx
-
arrayМассив объектов для индексирования
Возвращает
- Object Объект, в котором каждому элементу массива соответствует индекс по заданному свойству.
Принимает функцию, создающую ключ, и преобразует список объектов в объект, индексируя объекты по заданному ключу. Если несколько объектов создают одинаковое значение ключа индекса, в созданный объект будет включено только последнее значение.
Работает как трансдьюсер, если на месте списка передан трансформер.
См. также groupBy.
const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}];
R.indexBy(R.prop('id'), list);
//=> {abc: {id: 'abc', title: 'B'}, xyz: {id: 'xyz', title: 'A'}} indexOf Добавлено в v0.1.0
a → [a] → Number
Параметры
-
targetИскомый элемент.
-
xsМассив для поиска.
Возвращает
- Number Индекс искомого элемента или -1, если элемент не найден.
Возвращает позицию первого вхождения элемента в массив или -1, если элемента в массиве нет. Для определения равенства используется R.equals.
См. также lastIndexOf, findIndex.
R.indexOf(3, [1,2,3,4]); //=> 2 R.indexOf(10, [1,2,3,4]); //=> -1
init Добавлено в v0.9.0
[a] → [a]
String → StringПараметры
-
list
Возвращает
- *
Возвращает все элементы заданного списка или строки, кроме последнего.
R.init([1, 2, 3]); //=> [1, 2]
R.init([1, 2]); //=> [1]
R.init([1]); //=> []
R.init([]); //=> []
R.init('abc'); //=> 'ab'
R.init('ab'); //=> 'a'
R.init('a'); //=> ''
R.init(''); //=> '' innerJoin Добавлено в v0.24.0
((a, b) → Boolean) → [a] → [b] → [a]
Параметры
-
pred -
xs -
ys
Возвращает
- Array
Принимает предикат pred, список xs и список ys, а также возвращает список xs', состоящий из элементов xs, равных одному или нескольким элементам ys согласно pred.
pred должна быть бинарной функцией, принимающей по одному элементу из каждого списка.
Семантически xs, ys и xs' рассматриваются как множества, поэтому порядок не должен иметь значения. Однако, поскольку xs' упорядочен, реализация гарантирует, что его значения идут в том же порядке, что и в xs. Дубликаты не удаляются, поэтому в xs' могут быть дубликаты, если они есть в xs.
См. также intersection.
R.innerJoin(
(record, id) => record.id === id,
[{id: 824, name: 'Richie Furay'},
{id: 956, name: 'Dewey Martin'},
{id: 313, name: 'Bruce Palmer'},
{id: 456, name: 'Stephen Stills'},
{id: 177, name: 'Neil Young'}],
[177, 456, 999]
);
//=> [{id: 456, name: 'Stephen Stills'}, {id: 177, name: 'Neil Young'}] insert Добавлено в v0.2.2
Number → a → [a] → [a]
Параметры
-
indexПозиция для вставки элемента
-
eltЭлемент для вставки в массив
-
listСписок, в который нужно выполнить вставку
Возвращает
- Array Новый массив с элементом `elt`, вставленным в позицию `index`.
Вставляет переданный элемент в список в указанную index. Обратите внимание: исходный список не изменяется — функция возвращает его копию с внесенными изменениями. В результате применения этой функции ни один список не пострадал.
R.insert(2, 'x', [1,2,3,4]); //=> [1,2,'x',3,4]
insertAll Добавлено в v0.9.0
Number → [a] → [a] → [a]
Параметры
-
indexПозиция для вставки подсписка
-
eltsПодсписок для вставки в массив
-
listСписок, в который нужно вставить подсписок
Возвращает
- Array Новый массив с элементами `elts`, вставленными начиная с позиции `index`.
Вставляет подсписок в список в указанную index. Обратите внимание: исходный список не изменяется — функция возвращает его копию с внесенными изменениями. В результате применения этой функции ни один список не пострадал.
R.insertAll(2, ['x','y','z'], [1,2,3,4]); //=> [1,2,'x','y','z',3,4]
intersection Добавлено в v0.1.0
[*] → [*] → [*]
Параметры
-
list1Первый список.
-
list2Второй список.
Возвращает
- Array Список элементов, присутствующих и в `list1`, и в `list2`.
Объединяет два списка в множество (то есть без дубликатов), состоящее из элементов, общих для обоих списков.
См. также innerJoin.
R.intersection([1,2,3,4], [7,6,5,4,3]); //=> [4, 3]
intersperse Добавлено в v0.14.0
a → [a] → [a]
Параметры
-
separatorЭлемент для добавления в список.
-
listСписок, между элементами которого нужно вставить разделитель.
Возвращает
- Array Новый список.
Создает новый список, вставляя разделитель между его элементами.
Если метод присутствует, вызывает метод intersperse второго аргумента.
R.intersperse('a', ['b', 'n', 'n', 's']); //=> ['b', 'a', 'n', 'a', 'n', 'a', 's'] into Добавлено в v0.12.0
a → (b → b) → [c] → a
Параметры
-
accНачальное значение аккумулятора.
-
xfФункция-трансдьюсер. Получает трансформер и возвращает трансформер.
-
listСписок для перебора.
Возвращает
- * Итоговое накопленное значение.
Преобразует элементы списка с помощью трансдьюсера и добавляет преобразованные элементы к аккумулятору, используя подходящую функцию-итератор в зависимости от типа аккумулятора.
Аккумулятором может быть массив, строка, объект или трансформер. Перебираемые элементы добавляются в массивы и конкатенируются со строками. Объекты объединяются напрямую, а двухэлементные массивы объединяются как пары «ключ-значение».
Аккумулятором также может быть объект-трансформер, предоставляющий редуцирующую функцию-итератор с арностью 2 — step, функцию начального значения с арностью 0 — init и функцию извлечения результата с арностью 1 — result. Функция step используется в качестве функции-итератора в reduce. Функция result преобразует итоговое значение аккумулятора в возвращаемый тип; в большинстве случаев это R.identity. Функция init задает начальное значение аккумулятора.
Итерация выполняется с помощью R.reduce после инициализации трансдьюсера.
См. также transduce.
const numbers = [1, 2, 3, 4]; const transducer = R.compose(R.map(R.add(1)), R.take(2)); R.into([], transducer, numbers); //=> [2, 3] const intoArray = R.into([]); intoArray(transducer, numbers); //=> [2, 3]
invert Добавлено в v0.9.0
{s: x} → {x: [ s, … ]} Параметры
-
objОбъект или массив для инвертирования
Возвращает
- Object out Новый объект со значениями в виде массива.
Аналогична R.invertObj, однако обрабатывает объекты с повторяющимися значениями, помещая эти значения в массив.
См. также invertObj.
const raceResultsByFirstName = {
first: 'alice',
second: 'jake',
third: 'alice',
};
R.invert(raceResultsByFirstName);
//=> { 'alice': ['first', 'third'], 'jake':['second'] } invertObj Добавлено в v0.9.0
{s: x} → {x: s} Параметры
-
objОбъект или массив для инвертирования
Возвращает
- Object out Новый объект
Возвращает новый объект, в котором ключи заданного объекта становятся значениями, а значения заданного объекта, преобразованные в строки, — ключами. Обратите внимание: если одно значение встречается несколько раз, используется последний найденный ключ.
См. также invert.
const raceResults = {
first: 'alice',
second: 'jake'
};
R.invertObj(raceResults);
//=> { 'alice': 'first', 'jake':'second' }
// Alternatively:
const raceResults = ['alice', 'jake'];
R.invertObj(raceResults);
//=> { 'alice': '0', 'jake':'1' } invoker Добавлено в v0.1.0
Number → String → (a → b → … → n → Object → *)
Параметры
-
arityКоличество аргументов, которые должна принимать возвращаемая функция перед объектом-целью.
-
methodИмя метода объекта-цели, который нужно вызвать.
Возвращает
- function Новая каррированная функция.
Принимая arity (Number) и name (String), функция invoker возвращает каррированную функцию, которая принимает arity аргументов и объект context. Она «вызывает» функцию (метод) name для объекта context.
См. также construct.
// A function with no arguments
const asJson = invoker(0, "json")
// Just like calling .then((response) => response.json())
fetch("http://example.com/index.json").then(asJson)
// A function with one argument
const sliceFrom = invoker(1, 'slice');
sliceFrom(6, 'abcdefghijklm'); //=> 'ghijklm'
// A function with two arguments
const sliceFrom6 = invoker(2, 'slice')(6);
sliceFrom6(8, 'abcdefghijklm'); //=> 'gh'
// NOTE: You can't simply pass some of the arguments to the initial invoker function.
const firstCreditCardSection = invoker(2, "slice", 0, 4)
firstCreditCardSection("4242 4242 4242 4242") // => Function<...>
// Since invoker returns a curried function, you may partially apply it to create the function you need.
const firstCreditCardSection = invoker(2, "slice")(0, 4)
firstCreditCardSection("4242 4242 4242 4242") // => "4242" is Добавлено в v0.3.0
(* → {*}) → a → Boolean Параметры
-
ctorКонструктор
-
valПроверяемое значение
Возвращает
- Boolean
Проверяет, является ли объект (то есть val) экземпляром переданного конструктора. Если существует цепочка наследования, функция проверяет ее. Если val был создан с помощью Object.create, R.is(Object, val) === true.
R.is(Object, {}); //=> true
R.is(Number, 1); //=> true
R.is(Object, 1); //=> false
R.is(String, 's'); //=> true
R.is(String, new String('')); //=> true
R.is(Object, new String('')); //=> true
R.is(Object, 's'); //=> false
R.is(Number, {}); //=> false isEmpty Добавлено в v0.1.0
a → Boolean
Параметры
-
x
Возвращает
- Boolean
Возвращает true, если указанное значение является пустым значением своего типа; в противном случае — false.
См. также empty, isNotEmpty.
R.isEmpty([1, 2, 3]); //=> false
R.isEmpty([]); //=> true
R.isEmpty(''); //=> true
R.isEmpty(null); //=> false
R.isEmpty({}); //=> true
R.isEmpty({length: 0}); //=> false
R.isEmpty(Uint8Array.from('')); //=> true
R.isEmpty(new Set()) //=> true
R.isEmpty(new Map()) //=> true isNil Добавлено в v0.9.0
* → Boolean
Параметры
-
xЗначение для проверки.
Возвращает
- Boolean `true`, если `x` равно `undefined` или `null`, иначе `false`.
Проверяет, равно ли входное значение null или undefined.
R.isNil(null); //=> true R.isNil(undefined); //=> true R.isNil(0); //=> false R.isNil([]); //=> false
isNotEmpty Добавлено в v0.29.2
a → Boolean
Параметры
-
x
Возвращает
- Boolean
Возвращает false, если указанное значение является пустым значением своего типа; в противном случае — true.
R.isNotEmpty([1, 2, 3]); //=> true
R.isNotEmpty([]); //=> false
R.isNotEmpty(''); //=> false
R.isNotEmpty(null); //=> true
R.isNotEmpty({}); //=> false
R.isNotEmpty({length: 0}); //=> true
R.isNotEmpty(Uint8Array.from('')); //=> false isNotNil Добавлено в v0.29.0
* → Boolean
Параметры
-
xЗначение для проверки.
Возвращает
- Boolean `true`, если `x` не равно `undefined` или не равно `null`, иначе `false`.
Проверяет, что входное значение не равно null и не равно undefined.
R.isNotNil(null); //=> false R.isNotNil(undefined); //=> false R.isNotNil(0); //=> true R.isNotNil([]); //=> true
join Добавлено в v0.1.0
String → [a] → String
Параметры
-
separatorСтрока, используемая для разделения элементов.
-
xsЭлементы, которые нужно объединить в строку.
Возвращает
- String str Строка, полученная конкатенацией `xs` с `separator`.
Возвращает строку, полученную вставкой separator между каждым элементом и объединением всех элементов в одну строку.
См. также split.
const spacer = R.join(' ');
spacer(['a', 2, 3.4]); //=> 'a 2 3.4'
R.join('|', [1, 2, 3]); //=> '1|2|3' juxt Добавлено в v0.19.0
[(a, b, …, m) → n] → ((a, b, …, m) → [n])
Параметры
-
fnsМассив функций
Возвращает
- function Функция, которая возвращает список значений после применения каждой исходной функции `fns` к своим параметрам.
juxt применяет список функций к списку значений.
См. также applySpec.
const getRange = R.juxt([Math.min, Math.max]); getRange(3, 4, 9, -3); //=> [-3, 9]
keys Добавлено в v0.1.0
{k: v} → [k] Параметры
-
objОбъект, из которого нужно извлечь свойства
Возвращает
- Array Массив собственных свойств объекта.
Возвращает список, содержащий имена всех перечисляемых собственных свойств переданного объекта. Обратите внимание: порядок элементов в выходном массиве не гарантируется одинаковым на разных платформах JS.
См. также keysIn, values, toPairs.
R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c'] keysIn Добавлено в v0.2.0
{k: v} → [k] Параметры
-
objОбъект, из которого нужно извлечь свойства
Возвращает
- Array Массив собственных свойств объекта и свойств его прототипа.
Возвращает список, содержащий имена всех свойств переданного объекта, включая свойства прототипа. Обратите внимание: порядок элементов в выходном массиве не гарантируется одинаковым на разных платформах JS.
const F = function() { this.x = 'X'; };
F.prototype.y = 'Y';
const f = new F();
R.keysIn(f); //=> ['x', 'y'] last Добавлено в v0.1.4
[a] → a | Undefined
String → String | UndefinedПараметры
-
list
Возвращает
- *
Возвращает последний элемент указанного списка или строки.
R.last(['fi', 'fo', 'fum']); //=> 'fum'
R.last([]); //=> undefined
R.last('abc'); //=> 'c'
R.last(''); //=> undefined lastIndexOf Добавлено в v0.1.0
a → [a] → Number
Параметры
-
targetЭлемент для поиска.
-
xsМассив для поиска.
Возвращает
- Number индекс целевого элемента или -1, если элемент не найден.
Возвращает позицию последнего вхождения элемента в массиве или -1, если элемент не входит в массив. Для определения равенства используется R.equals.
См. также indexOf, findLastIndex.
R.lastIndexOf(3, [-1,3,3,0,1,2,3,4]); //=> 6 R.lastIndexOf(10, [1,2,3,4]); //=> -1
length Добавлено в v0.3.0
[a] → Number
Параметры
-
listМассив для проверки.
Возвращает
- Number Длина массива.
Возвращает количество элементов в массиве, возвращая list.length.
R.length([]); //=> 0 R.length([1, 2, 3]); //=> 3
lens Добавлено в v0.8.0
(s → a) → ((a, s) → s) → Lens s a
Lens s a = Functor f => (a → f a) → s → f sПараметры
-
getter -
setter
Возвращает
- Lens
Возвращает линзу для заданных функций-геттера и сеттера. Геттер «получает» значение фокуса, а сеттер «задаёт» его. Сеттер не должен изменять структуру данных.
См. также view, set, over, lensIndex, lensProp.
const xLens = R.lens(R.prop('x'), R.assoc('x'));
R.view(xLens, {x: 1, y: 2}); //=> 1
R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}
R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2} lensIndex Добавлено в v0.14.0
Number → Lens s a
Lens s a = Functor f => (a → f a) → s → f sПараметры
-
n
Возвращает
- Lens
Возвращает линзу, фокусом которой является указанный индекс.
Если idx < -list.length || idx >= list.length, R.set или R.over, возвращается исходный список.
См. также view, set, over, nth.
const headLens = R.lensIndex(0); R.view(headLens, ['a', 'b', 'c']); //=> 'a' R.set(headLens, 'x', ['a', 'b', 'c']); //=> ['x', 'b', 'c'] R.over(headLens, R.toUpper, ['a', 'b', 'c']); //=> ['A', 'b', 'c'] // out-of-range returns original list R.set(R.lensIndex(3), 'x', ['a', 'b', 'c']); //=> ['a', 'b', 'c'] R.over(R.lensIndex(-4), R.toUpper, ['a', 'b', 'c']); //=> ['a', 'b', 'c']
lensPath Добавлено в v0.19.0
[Idx] → Lens s a
Idx = String | Int | SymbolLens s a = Functor f => (a → f a) → s → f sПараметры
-
pathПуть для использования.
Возвращает
- Lens
Возвращает линзу, фокусом которой является указанный путь.
const xHeadYLens = R.lensPath(['x', 0, 'y']);
R.view(xHeadYLens, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});
//=> 2
R.set(xHeadYLens, 1, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});
//=> {x: [{y: 1, z: 3}, {y: 4, z: 5}]}
R.over(xHeadYLens, R.negate, {x: [{y: 2, z: 3}, {y: 4, z: 5}]});
//=> {x: [{y: -2, z: 3}, {y: 4, z: 5}]} lensProp Добавлено в v0.14.0
String → Lens s a
Lens s a = Functor f => (a → f a) → s → f sПараметры
-
k
Возвращает
- Lens
Возвращает линзу, фокусом которой является указанное свойство.
const xLens = R.lensProp('x');
R.view(xLens, {x: 1, y: 2}); //=> 1
R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}
R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2} lift Добавлено в v0.7.0
(*… → *) → ([*]… → [*])
Параметры
-
fnФункция для подъёма в контекст более высокого уровня
Возвращает
- function Поднятая функция.
«Поднимает» функцию с арностью >= 1, чтобы она могла «отображать» функцию над списком, Function или другим объектом, соответствующим спецификации FantasyLand Apply.
См. также liftN.
const madd3 = R.lift((a, b, c) => a + b + c); madd3([100, 200], [30, 40], [5, 6, 7]); //=> [135, 136, 137, 145, 146, 147, 235, 236, 237, 245, 246, 247] const madd5 = R.lift((a, b, c, d, e) => a + b + c + d + e); madd5([10, 20], [1], [2, 3], [4], [100, 200]); //=> [117, 217, 118, 218, 127, 227, 128, 228]
liftN Добавлено в v0.7.0
Number → (*… → *) → ([*]… → [*])
Параметры
-
fnФункция для подъёма в контекст более высокого уровня
Возвращает
- function Поднятая функция.
«Поднимает» функцию до указанной арности, чтобы она могла «отображать» функцию над заданным числом списков, Function или других объектов, соответствующих спецификации FantasyLand Apply.
const madd3 = R.liftN(3, (...args) => R.sum(args)); madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]
lt Добавлено в v0.1.0
Ord a => a → a → Boolean
Параметры
-
a -
b
Возвращает
- Boolean
Возвращает true, если первый аргумент меньше второго; в противном случае — false.
См. также gt.
R.lt(2, 1); //=> false
R.lt(2, 2); //=> false
R.lt(2, 3); //=> true
R.lt('a', 'z'); //=> true
R.lt('z', 'a'); //=> false lte Добавлено в v0.1.0
Ord a => a → a → Boolean
Параметры
-
a -
b
Возвращает
- Boolean
Возвращает true, если первый аргумент меньше или равен второму; в противном случае — false.
См. также gte.
R.lte(2, 1); //=> false
R.lte(2, 2); //=> true
R.lte(2, 3); //=> true
R.lte('a', 'z'); //=> true
R.lte('z', 'a'); //=> false map Добавлено в v0.1.0
Functor f => (a → b) → f a → f b
Параметры
-
fnФункция, вызываемая для каждого элемента входного
list. -
listСписок для обхода.
Возвращает
- Array Новый список.
Принимает функцию и функтор, применяет функцию к каждому значению функтора и возвращает функтор той же формы.
Ramda предоставляет подходящие реализации map для Array и Object, поэтому эту функцию можно применять к [1, 2, 3] или {x: 1, y: 2, z: 3}.
Если у второго аргумента есть метод map, вызывает его.
Работает как трансдьюсер, если на месте списка передан трансформер.
Также рассматривает функции как функторы и объединяет их композиционно.
См. также transduce, addIndex, pluck, project.
const double = x => x * 2;
R.map(double, [1, 2, 3]); //=> [2, 4, 6]
R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6} mapAccum Добавлено в v0.10.0
((acc, x) → (acc, y)) → acc → [x] → (acc, [y])
Параметры
-
fnФункция, вызываемая для каждого элемента входного
list. -
accЗначение аккумулятора.
-
listСписок для обхода.
Возвращает
- * Итоговое накопленное значение.
Функция mapAccum работает как сочетание map и reduce: она применяет функцию к каждому элементу списка, передавая накапливаемый параметр слева направо, и возвращает итоговое значение аккумулятора вместе с новым списком.
Функция-итератор получает два аргумента, acc и value, и должна возвращать кортеж [acc, value].
См. также scan, addIndex, mapAccumRight.
const digits = ['1', '2', '3', '4']; const appender = (a, b) => [a + b, a + b]; R.mapAccum(appender, 0, digits); //=> ['01234', ['01', '012', '0123', '01234']]
mapAccumRight Добавлено в v0.10.0
((acc, x) → (acc, y)) → acc → [x] → (acc, [y])
Параметры
-
fnФункция, вызываемая для каждого элемента входного
list. -
accЗначение аккумулятора.
-
listСписок для обхода.
Возвращает
- * Итоговое накопленное значение.
Функция mapAccumRight работает как сочетание map и reduce: она применяет функцию к каждому элементу списка, передавая накапливаемый параметр справа налево, и возвращает итоговое значение аккумулятора вместе с новым списком.
Аналогична mapAccum, но проходит входной список справа налево.
Функция-итератор получает два аргумента, acc и value, и должна возвращать кортеж [acc, value].
const digits = ['1', '2', '3', '4']; const appender = (a, b) => [b + a, b + a]; R.mapAccumRight(appender, 5, digits); //=> ['12345', ['12345', '2345', '345', '45']]
mapKeys Добавлено в v0.31.0
(String → String) → Object → Object
Параметры
-
fn -
obj
Возвращает
- Object
Преобразует объект, заменяя ключи новыми значениями.
Примечание: если несколько ключей преобразуются в один и тот же новый ключ, будет использовано значение последнего обработанного ключа.
См. также map, rebuild, renameKeys.
R.mapKeys(toUpper, {foo: 1, bar: 2, baz: 3}) //=> {FOO: 1, BAR: 2, BAZ: 3} mapObjIndexed Добавлено в v0.9.0
((*, String, Object) → *) → Object → Object
Параметры
-
fn -
obj
Возвращает
- Object
Версия map, предназначенная для объектов. Функция применяется к трём аргументам: (value, key, obj). Если важно только значение, используйте вместо этого map.
См. также map.
const xyz = { x: 1, y: 2, z: 3 };
const prependKeyAndDouble = (num, key, obj) => key + (num * 2);
R.mapObjIndexed(prependKeyAndDouble, xyz); //=> { x: 'x2', y: 'y4', z: 'z6' } match Добавлено в v0.1.0
RegExp → String → [String | Undefined]
Параметры
-
rxРегулярное выражение.
-
strСтрока для сопоставления
Возвращает
- Array Список совпадений или пустой массив.
Проверяет соответствие строки регулярному выражению. Обратите внимание: если совпадений нет, функция возвращает пустой массив. Это отличается от String.prototype.match, которая при отсутствии совпадений возвращает null.
См. также test.
R.match(/([a-z]a)/g, 'bananas'); //=> ['ba', 'na', 'na'] R.match(/a/, 'b'); //=> [] R.match(/a/, null); //=> TypeError: null does not have a method named "match"
mathMod Добавлено в v0.3.0
Number → Number → Number
Параметры
-
mДелимое.
-
pМодуль.
Возвращает
- Number Результат `b mod a`.
mathMod ведёт себя так, как должен вести себя оператор modulo с математической точки зрения, в отличие от оператора % (и, соответственно, R.modulo). Поэтому, хотя -17 % 5 равно -2, mathMod(-17, 5) равно 3. Для mathMod требуются целочисленные аргументы; функция возвращает NaN, если модуль равен нулю или отрицателен.
См. также modulo.
R.mathMod(-17, 5); //=> 3 R.mathMod(17, 5); //=> 2 R.mathMod(17, -5); //=> NaN R.mathMod(17, 0); //=> NaN R.mathMod(17.2, 5); //=> NaN R.mathMod(17, 5.3); //=> NaN const clock = R.mathMod(R.__, 12); clock(15); //=> 3 clock(24); //=> 0 const seventeenMod = R.mathMod(17); seventeenMod(3); //=> 2 seventeenMod(4); //=> 1 seventeenMod(10); //=> 7
max Добавлено в v0.1.0
Ord a => a → a → a
Параметры
-
a -
b
Возвращает
- *
Возвращает большее из двух аргументов.
R.max(789, 123); //=> 789
R.max('a', 'b'); //=> 'b' maxBy Добавлено в v0.8.0
Ord b => (a → b) → a → a → a
Параметры
-
f -
a -
b
Возвращает
- *
Принимает функцию и два значения и возвращает то из них, которое даёт больший результат при передаче в указанную функцию.
// square :: Number -> Number const square = n => n * n; R.maxBy(square, -3, 2); //=> -3 R.reduce(R.maxBy(square), 0, [3, -5, 4, 1, -2]); //=> -5 R.reduce(R.maxBy(square), 0, []); //=> 0
mean Добавлено в v0.14.0
[Number] → Number
Параметры
-
list
Возвращает
- Number
Возвращает среднее арифметическое заданного списка чисел.
См. также median.
R.mean([2, 7, 9]); //=> 6 R.mean([]); //=> NaN
median Добавлено в v0.14.0
[Number] → Number
Параметры
-
list
Возвращает
- Number
Возвращает медиану заданного списка чисел.
См. также mean.
R.median([2, 9, 7]); //=> 7 R.median([7, 2, 10, 9]); //=> 8 R.median([]); //=> NaN
memoizeWith Добавлено в v0.24.0
(*… → String) → (*… → a) → (*… → a)
Параметры
-
keyGenФункция для генерации ключа кэша.
-
fnФункция для мемоизации.
Возвращает
- function Мемоизированная версия `fn`.
Принимает функцию keyGen, возвращающую строку, и функцию fn, а затем возвращает новую функцию, которая при повторных вызовах с теми же аргументами возвращает кэшированные результаты.
При вызове функции keyGen применяется к тем же аргументам, а её результат становится ключом кэша. Если кэш содержит значение с таким ключом, функция просто возвращает его и вовсе не вызывает fn.
В противном случае fn применяется к тем же аргументам, её возвращаемое значение кэшируется под этим ключом и возвращается функцией.
При реализации keyGen необходимо избегать коллизий ключей, а также утечек памяти и изменения аргументов при отслеживании ссылок.
const withAge = memoizeWith(o => `${o.birth}/${o.death}`, ({birth, death}) => {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
// keyGen fn
console.log(`computing age for ${birth}/${death}`);
return ({birth, death, age: death - birth});
});
withAge({birth: 1921, death: 1999});
//=> LOG: computing age for 1921/1999
//=> {birth: 1921, death: 1999, age: 78} (returned from fn)
withAge({birth: 1921, death: 1999});
//=> {birth: 1921, death: 1999, age: 78} (returned from cache) mergeAll Добавлено в v0.10.0
[{k: v}] → {k: v} Параметры
-
listМассив объектов
Возвращает
- Object Объединённый объект.
Создаёт новый объект, содержащий собственные свойства объектов из списка. Если ключ существует более чем в одном объекте, будет использовано значение из последнего объекта, в котором он встречается.
См. также reduce.
R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3}
R.mergeAll([{foo:1},{foo:2},{bar:2}]); //=> {foo:2,bar:2} mergeDeepLeft Добавлено в v0.24.0
{a} → {a} → {a} Параметры
-
lObj -
rObj
Возвращает
- Object
Создаёт новый объект, объединяя собственные свойства первого объекта с собственными свойствами второго. Если ключ существует в обоих объектах:
- если оба значения являются объектами, они рекурсивно объединяются;
- в противном случае используется значение из первого объекта.
См. также mergeDeepRight, mergeDeepWith, mergeDeepWithKey.
R.mergeDeepLeft({ name: 'fred', age: 10, contact: { email: 'moo@example.com' }},
{ age: 40, contact: { email: 'baa@example.com' }});
//=> { name: 'fred', age: 10, contact: { email: 'moo@example.com' }} mergeDeepRight Добавлено в v0.24.0
{a} → {a} → {a} Параметры
-
lObj -
rObj
Возвращает
- Object
Создаёт новый объект, объединяя собственные свойства первого объекта с собственными свойствами второго. Если ключ существует в обоих объектах:
- если оба значения являются объектами, они рекурсивно объединяются;
- в противном случае используется значение из второго объекта.
См. также mergeDeepLeft, mergeDeepWith, mergeDeepWithKey.
R.mergeDeepRight({ name: 'fred', age: 10, contact: { email: 'moo@example.com' }},
{ age: 40, contact: { email: 'baa@example.com' }});
//=> { name: 'fred', age: 40, contact: { email: 'baa@example.com' }} mergeDeepWith Добавлено в v0.24.0
((a, a) → a) → {a} → {a} → {a} Параметры
-
fn -
lObj -
rObj
Возвращает
- Object
Создаёт новый объект, содержащий собственные свойства двух переданных объектов. Если ключ существует в обоих объектах:
- если оба связанных с ним значения также являются объектами, они рекурсивно объединяются;
- в противном случае к связанным значениям применяется переданная функция, а её результат становится новым значением этого ключа. Если ключ существует только в одном объекте, его значение добавляется в результирующий объект.
См. также mergeWith, mergeDeepWithKey.
R.mergeDeepWith(R.concat,
{ a: true, c: { values: [10, 20] }},
{ b: true, c: { values: [15, 35] }});
//=> { a: true, b: true, c: { values: [10, 20, 15, 35] }} mergeDeepWithKey Добавлено в v0.24.0
((String, a, a) → a) → {a} → {a} → {a} Параметры
-
fn -
lObj -
rObj
Возвращает
- Object
Создаёт новый объект, содержащий собственные свойства двух переданных объектов. Если ключ существует в обоих объектах:
- если оба связанных с ним значения также являются объектами, они рекурсивно объединяются;
- в противном случае переданная функция применяется к ключу и связанным с ним значениям, а её результат становится новым значением этого ключа. Если ключ существует только в одном объекте, его значение добавляется в результирующий объект.
См. также mergeWithKey, mergeDeepWith.
let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
R.mergeDeepWithKey(concatValues,
{ a: true, c: { thing: 'foo', values: [10, 20] }},
{ b: true, c: { thing: 'bar', values: [15, 35] }});
//=> { a: true, b: true, c: { thing: 'bar', values: [10, 20, 15, 35] }} mergeLeft Добавлено в v0.26.0
{k: v} → {k: v} → {k: v} Параметры
-
l -
r
Возвращает
- Object
Создаёт новый объект, объединяя собственные свойства первого объекта с собственными свойствами второго. Если ключ существует в обоих объектах, используется значение из первого объекта.
См. также mergeRight, mergeDeepLeft, mergeWith, mergeWithKey.
R.mergeLeft({ 'age': 40 }, { 'name': 'fred', 'age': 10 });
//=> { 'name': 'fred', 'age': 40 }
const resetToDefault = R.mergeLeft({x: 0});
resetToDefault({x: 5, y: 2}); //=> {x: 0, y: 2} mergeRight Добавлено в v0.26.0
{k: v} → {k: v} → {k: v} Параметры
-
l -
r
Возвращает
- Object
Создаёт новый объект, объединяя собственные свойства первого объекта с собственными свойствами второго. Если ключ существует в обоих объектах, используется значение из второго объекта.
См. также mergeLeft, mergeDeepRight, mergeWith, mergeWithKey.
R.mergeRight({ 'name': 'fred', 'age': 10 }, { 'age': 40 });
//=> { 'name': 'fred', 'age': 40 }
const withDefaults = R.mergeRight({x: 0, y: 0});
withDefaults({y: 2}); //=> {x: 0, y: 2} mergeWith Добавлено в v0.19.0
((a, a) → a) → {a} → {a} → {a} Параметры
-
fn -
l -
r
Возвращает
- Object
Создаёт новый объект, содержащий собственные свойства двух переданных объектов. Если ключ существует в обоих объектах, переданная функция применяется к связанным с этим ключом значениям каждого объекта, а результат используется как значение этого ключа в возвращаемом объекте.
См. также mergeDeepWith, mergeWithKey.
R.mergeWith(R.concat,
{ a: true, values: [10, 20] },
{ b: true, values: [15, 35] });
//=> { a: true, b: true, values: [10, 20, 15, 35] } mergeWithKey Добавлено в v0.19.0
((String, a, a) → a) → {a} → {a} → {a} Параметры
-
fn -
l -
r
Возвращает
- Object
Создаёт новый объект, содержащий собственные свойства двух переданных объектов. Если ключ существует в обоих объектах, переданная функция применяется к ключу и связанным с ним значениям каждого объекта, а результат используется как значение этого ключа в возвращаемом объекте.
См. также mergeDeepWithKey, mergeWith.
let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
R.mergeWithKey(concatValues,
{ a: true, thing: 'foo', values: [10, 20] },
{ b: true, thing: 'bar', values: [15, 35] });
//=> { a: true, b: true, thing: 'bar', values: [10, 20, 15, 35] } min Добавлено в v0.1.0
Ord a => a → a → a
Параметры
-
a -
b
Возвращает
- *
Возвращает меньшее из двух аргументов.
R.min(789, 123); //=> 123
R.min('a', 'b'); //=> 'a' minBy Добавлено в v0.8.0
Ord b => (a → b) → a → a → a
Параметры
-
f -
a -
b
Возвращает
- *
Принимает функцию и два значения и возвращает то из них, которое даёт меньший результат при передаче в указанную функцию.
// square :: Number -> Number const square = n => n * n; R.minBy(square, -3, 2); //=> 2 R.reduce(R.minBy(square), Infinity, [3, -5, 4, 1, -2]); //=> 1 R.reduce(R.minBy(square), Infinity, []); //=> Infinity
modify Добавлено в v0.28.0
Idx → (v → v) → {k: v} → {k: v} Параметры
-
propСвойство, которое нужно изменить.
-
fnФункция, применяемая к свойству.
-
objectОбъект, который нужно преобразовать.
Возвращает
- Object Преобразованный объект.
Создает копию переданного объекта, применяя функцию fn к указанному свойству prop.
Функция не будет вызвана, а объект не изменится, если соответствующее свойство отсутствует в объекте. Все свойства, не являющиеся примитивами, копируются в новый объект по ссылке.
const person = {name: 'James', age: 20, pets: ['dog', 'cat']};
R.modify('age', R.add(1), person); //=> {name: 'James', age: 21, pets: ['dog', 'cat']}
R.modify('pets', R.append('turtle'), person); //=> {name: 'James', age: 20, pets: ['dog', 'cat', 'turtle']} modifyPath Добавлена в v0.28.0
[Idx] → (v → v) → {k: v} → {k: v} Параметры
-
pathПуть, который нужно изменить.
-
fnФункция, применяемая к пути.
-
objectОбъект, который нужно преобразовать.
Возвращает
- Object Преобразованный объект.
Создает поверхностную копию переданного объекта, применяя функцию fn к значению по указанному пути.
Функция не будет вызвана, а объект не изменится, если соответствующий путь отсутствует в объекте. Все свойства, не являющиеся примитивами, копируются в новый объект по ссылке.
const person = {name: 'James', address: { zipCode: '90216' }};
R.modifyPath(['address', 'zipCode'], R.reverse, person); //=> {name: 'James', address: { zipCode: '61209' }}
// Can handle arrays too
const person = {name: 'James', addresses: [{ zipCode: '90216' }]};
R.modifyPath(['addresses', 0, 'zipCode'], R.reverse, person); //=> {name: 'James', addresses: [{ zipCode: '61209' }]} modulo Добавлена в v0.1.1
Number → Number → Number
Параметры
-
aДелимое.
-
bПсевдомодуль
Возвращает
- Number Результат `b % a`.
Делит первый параметр на второй и возвращает остаток. Обратите внимание, что эта функция сохраняет поведение оператора остатка от деления в стиле JavaScript. Для математического вычисления остатка см. mathMod.
См. также mathMod.
R.modulo(17, 3); //=> 2 // JS behavior: R.modulo(-17, 3); //=> -2 R.modulo(17, -3); //=> 2 const isOdd = R.modulo(R.__, 2); isOdd(42); //=> 0 isOdd(21); //=> 1
move Добавлена в v0.27.1
Number → Number → [a] → [a]
Параметры
-
fromИсходный индекс
-
toЦелевой индекс
-
listСписок, в котором будет выполнено перемещение
Возвращает
- Array Новый список с измененным порядком элементов
Перемещает элемент с индексом from на индекс to в списке элементов. Будет создан новый список с элементами в новом порядке.
R.move(0, 2, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['b', 'c', 'a', 'd', 'e', 'f'] R.move(-1, 0, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['f', 'a', 'b', 'c', 'd', 'e'] list rotation
multiply Добавлена в v0.1.0
Number → Number → Number
Параметры
-
aПервое значение.
-
bВторое значение.
Возвращает
- Number Результат `a * b`.
Перемножает два числа. Эквивалентна a * b, но каррирована.
См. также divide.
const double = R.multiply(2); const triple = R.multiply(3); double(3); //=> 6 triple(4); //=> 12 R.multiply(2, 5); //=> 10
nAry Добавлена в v0.1.0
Number → (* → a) → (* → a)
Параметры
-
nЖелаемая арность новой функции.
-
fnФункция, которую нужно обернуть.
Возвращает
- function Новая функция-обертка для `fn`. Гарантируется, что арность новой функции равна `n`.
Оборачивает функцию с любой арностью (включая нулевую) в функцию, принимающую ровно n параметров. Лишние параметры не будут переданы исходной функции.
const takesTwoArgs = (a, b) => [a, b]; takesTwoArgs.length; //=> 2 takesTwoArgs(1, 2); //=> [1, 2] const takesOneArg = R.nAry(1, takesTwoArgs); takesOneArg.length; //=> 1 // Only `n` arguments are passed to the wrapped function takesOneArg(1, 2); //=> [1, undefined]
negate Добавлена в v0.9.0
Number → Number
Параметры
-
n
Возвращает
- Number
Меняет знак аргумента на противоположный.
R.negate(42); //=> -42
none Добавлена в v0.12.0
(a → Boolean) → [a] → Boolean
Параметры
-
fnФункция-предикат.
-
listРассматриваемый массив.
Возвращает
- Boolean `true`, если предикат не выполняется для каждого элемента, иначе `false`.
Возвращает true, если ни один элемент списка не удовлетворяет предикату, и false в противном случае.
Если у второго аргумента есть метод all, вызывает его.
Работает как трансдьюсер, если вместо списка передан трансформер.
const isEven = n => n % 2 === 0; const isOdd = n => n % 2 !== 0; R.none(isEven, [1, 3, 5, 7, 9, 11]); //=> true R.none(isOdd, [1, 3, 5, 7, 8, 11]); //=> false
not Добавлена в v0.1.0
* → Boolean
Параметры
-
aлюбое значение
Возвращает
- Boolean логическое отрицание переданного аргумента.
Функция, возвращающая ! своего аргумента. Возвращает true при передаче ложного значения и false при передаче истинного.
См. также complement.
R.not(true); //=> false R.not(false); //=> true R.not(0); //=> true R.not(1); //=> false
nth Добавлена в v0.1.0
Number → [a] → a | Undefined
Number → String → String | UndefinedПараметры
-
offset -
list
Возвращает
- *
Возвращает n-й элемент заданного списка или строки. Если n отрицательное, возвращается элемент с индексом length + n.
const list = ['foo', 'bar', 'baz', 'quux']; R.nth(1, list); //=> 'bar' R.nth(-1, list); //=> 'quux' R.nth(-99, list); //=> undefined R.nth(2, 'abc'); //=> 'c' R.nth(3, 'abc'); //=> undefined
nthArg Добавлена в v0.9.0
Number → *… → *
Параметры
-
n
Возвращает
- function
Возвращает функцию, которая возвращает свой n-й аргумент.
R.nthArg(1)('a', 'b', 'c'); //=> 'b'
R.nthArg(-1)('a', 'b', 'c'); //=> 'c' o Добавлена в v0.24.0
(b → c) → (a → b) → a → c
Параметры
-
f -
g
Возвращает
- function
o — каррированная функция композиции, возвращающая унарную функцию. Как и compose, o выполняет композицию функций справа налево. В отличие от compose, крайняя правая функция, переданная в o, вызывается только с одним аргументом. Кроме того, в отличие от compose, o принимает только две унарные функции. Имя o выбрано из-за сходства с математическим оператором композиции ∘.
const classyGreeting = name => "The name's " + name.last + ", " + name.first + " " + name.last
const yellGreeting = R.o(R.toUpper, classyGreeting);
yellGreeting({first: 'James', last: 'Bond'}); //=> "THE NAME'S BOND, JAMES BOND"
R.o(R.multiply(10), R.add(10))(-4) //=> 60 objOf Добавлена в v0.18.0
String → a → {String:a} Параметры
-
key -
val
Возвращает
- Object
Создает объект с одной парой ключ:значение.
См. также pair.
const matchPhrases = R.compose(
R.objOf('must'),
R.map(R.objOf('match_phrase'))
);
matchPhrases(['foo', 'bar', 'baz']); //=> {must: [{match_phrase: 'foo'}, {match_phrase: 'bar'}, {match_phrase: 'baz'}]} of Добавлена в v0.3.0
(* → {*}) → a → {a} Параметры
-
CtorКонструктор
-
valлюбое значение
Возвращает
- * Экземпляр `Ctor`, содержащий `val`.
Принимает конструктор и значение и возвращает новый экземпляр этого конструктора, содержащий значение.
Сначала вызывает метод fantasy-land/of конструктора (если он есть), а в противном случае — метод of (если он есть). Если ни одного из этих методов нет, оборачивает значение в массив.
Обратите внимание: эта of отличается от of ES6. См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of
R.of(Array, 42); //=> [42] R.of(Array, [42]); //=> [[42]] R.of(Maybe, 42); //=> Maybe.Just(42)
omit Добавлена в v0.1.0
[String] → {String: *} → {String: *} Параметры
-
namesмассив строк с именами свойств, которые нужно исключить из нового объекта
-
objОбъект, из которого выполняется копирование
Возвращает
- Object Новый объект без свойств, указанных в `names`.
Возвращает частичную копию объекта, исключая указанные ключи.
См. также pick.
R.omit(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, c: 3} on Добавлена в v0.28.0
((a, a) → b) → (c → a) → c → c → b
Параметры
-
fбинарная функция
-
gунарная функция
-
aлюбое значение
-
bлюбое значение
Возвращает
- any Результат `f`
Принимает бинарную функцию f, унарную функцию g и два значения. Применяет g к каждому значению, а затем передает результаты в f.
Также известна как комбинатор P.
const eqBy = R.on((a, b) => a === b);
eqBy(R.prop('a'), {b:0, a:1}, {a:1}) //=> true;
const containsInsensitive = R.on(R.includes, R.toLower);
containsInsensitive('o', 'FOO'); //=> true once Добавлена в v0.1.0
(a… → b) → (a… → b)
Параметры
-
fnФункция, которую нужно обернуть в оболочку, допускающую только один вызов.
Возвращает
- function Функция-обертка.
Принимает функцию fn и возвращает функцию, которая защищает вызов fn таким образом, что fn может быть вызвана только один раз, независимо от количества вызовов возвращенной функции. При последующих вызовах возвращается значение, вычисленное при первом вызове.
const addOneOnce = R.once(x => x + 1); addOneOnce(10); //=> 11 addOneOnce(addOneOnce(50)); //=> 11
or Добавлена в v0.1.0
a → b → a | b
Параметры
-
a -
b
Возвращает
- Any
Возвращает первый аргумент, если он истинный, иначе — второй аргумент. Если оба входных значения являются Boolean, действует как логический оператор or.
R.or(true, true); //=> true R.or(true, false); //=> true R.or(false, true); //=> true R.or(false, false); //=> false
otherwise Добавлена в v0.26.0
(e → b) → (Promise e a) → (Promise e b)
(e → (Promise f b)) → (Promise e a) → (Promise f b)Параметры
-
onFailureФункция, которую нужно применить. Может возвращать значение или промис со значением.
-
p
Возвращает
- Promise Результат вызова `p.then(null, onFailure)`
Возвращает результат применения функции onFailure к значению внутри отклоненного промиса. Это полезно для обработки отклоненных промисов в композициях функций.
См. также andThen.
const failedFetch = id => Promise.reject('bad ID');
const useDefault = () => ({ firstName: 'Bob', lastName: 'Loblaw' });
//recoverFromFailure :: String -> Promise ({ firstName, lastName })
const recoverFromFailure = R.pipe(
failedFetch,
R.otherwise(useDefault),
R.andThen(R.pick(['firstName', 'lastName'])),
);
recoverFromFailure(12345).then(console.log); over Добавлена в v0.16.0
Lens s a → (a → a) → s → s
Lens s a = Functor f => (a → f a) → s → f sПараметры
-
lens -
v -
x
Возвращает
- *
Возвращает результат «установки» части заданной структуры данных, на которую указывает заданная линза, в значение, полученное применением заданной функции к значению, на которое указывает линза.
См. также view, set, lens, lensIndex, lensProp, lensPath.
const headLens = R.lensIndex(0); R.over(headLens, R.toUpper, ['foo', 'bar', 'baz']); //=> ['FOO', 'bar', 'baz']
pair Добавлена в v0.18.0
a → b → (a,b)
Параметры
-
fst -
snd
Возвращает
- Array
Принимает два аргумента, fst и snd, и возвращает [fst, snd].
R.pair('foo', 'bar'); //=> ['foo', 'bar'] partial Добавлена в v0.10.0
((a, b, c, …, n) → x) → [a, b, c, …] → ((d, e, f, …, n) → x)
Параметры
-
f -
args
Возвращает
- function
Принимает функцию f и список аргументов и возвращает функцию g. При вызове g возвращает результат применения f к аргументам, переданным изначально, за которыми следуют аргументы, переданные в g.
См. также partialRight, curry.
const multiply2 = (a, b) => a * b;
const double = R.partial(multiply2, [2]);
double(3); //=> 6
const greet = (salutation, title, firstName, lastName) =>
salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';
const sayHello = R.partial(greet, ['Hello']);
const sayHelloToMs = R.partial(sayHello, ['Ms.']);
sayHelloToMs('Jane', 'Jones'); //=> 'Hello, Ms. Jane Jones!' partialObject Добавлена в v0.28.0
(({ a, b, c, …, n }) → x) → { a, b, c, …} → ({ d, e, f, …, n } → x) Параметры
-
f -
props
Возвращает
- function
Принимает функцию f и объект и возвращает функцию g. При вызове g возвращает результат применения f к исходному объекту, глубоко объединенному справа с объектом, переданным в качестве аргумента g.
См. также partial, partialRight, curry, mergeDeepRight.
const multiply2 = ({ a, b }) => a * b;
const double = R.partialObject(multiply2, { a: 2 });
double({ b: 2 }); //=> 4
const greet = ({ salutation, title, firstName, lastName }) =>
salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';
const sayHello = R.partialObject(greet, { salutation: 'Hello' });
const sayHelloToMs = R.partialObject(sayHello, { title: 'Ms.' });
sayHelloToMs({ firstName: 'Jane', lastName: 'Jones' }); //=> 'Hello, Ms. Jane Jones!' partialRight Добавлена в v0.10.0
((a, b, c, …, n) → x) → [d, e, f, …, n] → ((a, b, c, …) → x)
Параметры
-
f -
args
Возвращает
- function
Принимает функцию f и список аргументов и возвращает функцию g. При вызове g возвращает результат применения f к аргументам, переданным в g, за которыми следуют аргументы, переданные изначально.
См. также partial.
const greet = (salutation, title, firstName, lastName) =>
salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!';
const greetMsJaneJones = R.partialRight(greet, ['Ms.', 'Jane', 'Jones']);
greetMsJaneJones('Hello'); //=> 'Hello, Ms. Jane Jones!' partition Добавлена в v0.1.4
Filterable f => (a → Boolean) → f a → [f a, f a]
Параметры
-
predПредикат, определяющий, к какой части относится элемент.
-
filterableсписок (или другой фильтруемый объект), который нужно разделить.
Возвращает
- Array Массив, содержащий сначала подмножество элементов, удовлетворяющих предикату, а затем подмножество элементов, которые ему не удовлетворяют.
Принимает предикат и список или другой объект Filterable и возвращает пару фильтруемых объектов того же типа: сначала элементы, удовлетворяющие предикату, затем не удовлетворяющие. К фильтруемым объектам относятся обычные объекты и любые объекты с методом filter, например Array.
R.partition(R.includes('s'), ['sss', 'ttt', 'foo', 'bars']);
// => [ [ 'sss', 'bars' ], [ 'ttt', 'foo' ] ]
R.partition(R.includes('s'), { a: 'sss', b: 'ttt', foo: 'bars' });
// => [ { a: 'sss', foo: 'bars' }, { b: 'ttt' } ] path Добавлена в v0.2.0
[Idx] → {a} → a | Undefined Idx = String | NonNegativeIntIdx = String | Int | SymbolПараметры
-
pathИспользуемый путь.
-
objОбъект или массив, из которого нужно получить вложенное свойство.
Возвращает
- * Данные по `path`.
Получает значение по заданному пути. Узлами пути могут быть произвольные строки или неотрицательные целые числа. Для любых других значений результат не определен. Целочисленные пути предназначены для индексации массивов, строковые — для объектов.
См. также prop, nth, assocPath, dissocPath.
R.path(['a', 'b'], {a: {b: 2}}); //=> 2
R.path(['a', 'b'], {c: {b: 2}}); //=> undefined
R.path(['a', 'b', 0], {a: {b: [1, 2, 3]}}); //=> 1
R.path(['a', 'b', -2], {a: {b: [1, 2, 3]}}); //=> 2
R.path([2], {'2': 2}); //=> 2
R.path([-2], {'-2': 'a'}); //=> undefined pathEq Добавлена в v0.7.0
a → [Idx] → {a} → Boolean Idx = String | Int | SymbolПараметры
-
valЗначение для сравнения со вложенным свойством
-
pathПуть к используемому вложенному свойству
-
objОбъект, в котором нужно проверить вложенное свойство
Возвращает
- Boolean `true`, если значение равно свойству вложенного объекта, иначе `false`.
Определяет, имеет ли вложенный путь объекта заданное значение в терминах R.equals. Чаще всего используется для фильтрации списка.
См. также whereEq, propEq, pathSatisfies, equals.
const user1 = { address: { zipCode: 90210 } };
const user2 = { address: { zipCode: 55555 } };
const user3 = { name: 'Bob' };
const users = [ user1, user2, user3 ];
const isFamous = R.pathEq(90210, ['address', 'zipCode']);
R.filter(isFamous, users); //=> [ user1 ] pathOr Добавлена в v0.18.0
a → [Idx] → {a} → a Idx = String | Int | SymbolПараметры
-
dЗначение по умолчанию.
-
pИспользуемый путь.
-
objОбъект, из которого нужно получить вложенное свойство.
Возвращает
- * Данные по `path` заданного объекта или значение по умолчанию.
Если у заданного ненулевого объекта есть значение по указанному пути, возвращает это значение. В противном случае возвращает значение по умолчанию.
R.pathOr('N/A', ['a', 'b'], {a: {b: 2}}); //=> 2
R.pathOr('N/A', ['a', 'b'], {c: {b: 2}}); //=> "N/A" paths Добавлена в v0.27.1
[Idx] → {a} → [a | Undefined] Idx = [String | Int | Symbol]Параметры
-
pathsArrayМассив путей, значения по которым нужно получить.
-
objОбъект, из которого нужно получить вложенные свойства.
Возвращает
- Array Список значений по путям, указанным в "pathsArray".
Получает значения объекта по заданным путям.
См. также path.
R.paths([['a', 'b'], ['p', 0, 'q']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, 3]
R.paths([['a', 'b'], ['p', 'r']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, undefined] pathSatisfies Добавлена в v0.19.0
(a → Boolean) → [Idx] → {a} → Boolean Idx = String | Int | SymbolПараметры
-
pred -
propPath -
obj
Возвращает
- Boolean
Возвращает true, если свойство указанного объекта по заданному пути удовлетворяет заданному предикату; иначе возвращает false.
См. также propSatisfies, path.
R.pathSatisfies(y => y > 0, ['x', 'y'], {x: {y: 2}}); //=> true
R.pathSatisfies(R.is(Object), [], {x: {y: 2}}); //=> true pick Добавлена в v0.1.0
[k] → {k: v} → {k: v} Параметры
-
namesмассив строк с именами свойств, которые нужно скопировать в новый объект
-
objОбъект, из которого выполняется копирование
Возвращает
- Object Новый объект, содержащий только свойства из `names`.
Возвращает частичную копию объекта, содержащую только указанные ключи. Если ключ не существует, свойство игнорируется.
R.pick(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}
R.pick(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1} pickAll Добавлена в v0.1.0
[k] → {k: v} → {k: v} Параметры
-
namesмассив строк с именами свойств, которые нужно скопировать в новый объект
-
objОбъект, из которого выполняется копирование
Возвращает
- Object Новый объект, содержащий только свойства из `names`.
Аналогична pick, но включает пару key: undefined для отсутствующих свойств.
См. также pick.
R.pickAll(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}
R.pickAll(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, e: undefined, f: undefined} pickBy Добавлена в v0.8.0
((v, k) → Boolean) → {k: v} → {k: v} Параметры
-
predПредикат, определяющий, нужно ли включать ключ в выходной объект.
-
objОбъект, из которого выполняется копирование
Возвращает
- Object Новый объект, содержащий только свойства, удовлетворяющие `pred`.
Возвращает частичную копию объекта, содержащую только ключи, удовлетворяющие заданному предикату.
const isUpperCase = (val, key) => key.toUpperCase() === key;
R.pickBy(isUpperCase, {a: 1, b: 2, A: 3, B: 4}); //=> {A: 3, B: 4} pipe Добавлена в v0.1.0
(((a, b, …, n) → o), (o → p), …, (x → y), (y → z)) → ((a, b, …, n) → z)
Параметры
-
functions
Возвращает
- function
Выполняет композицию функций слева направо. Первый аргумент может иметь любую арность; остальные аргументы должны быть унарными.
В некоторых библиотеках эта функция называется sequence.
Примечание: Результат pipe автоматически не каррируется.
См. также compose.
const f = R.pipe(Math.pow, R.negate, R.inc); f(3, 4); // -(3^4) + 1
pipeWith Добавлена в v0.26.0
((* → *), [((a, b, …, n) → o), (o → p), …, (x → y), (y → z)]) → ((a, b, …, n) → z)
Параметры
-
transformerФункция преобразования
-
functionsФункции для конвейерной композиции
Возвращает
- function
Выполняет композицию функций слева направо с использованием функции преобразования. Первая функция может иметь любую арность; остальные функции должны быть унарными.
Примечание: Результат pipeWith автоматически не каррируется. Функция преобразования не используется для первого аргумента.
См. также andThen, composeWith, pipe.
pluck Добавлена в v0.1.0
Functor f => k → f {k: v} → f v Параметры
-
keyИмя ключа, значение которого нужно извлечь из каждого объекта.
-
fМассив или функтор для обработки.
Возвращает
- Array Список значений для заданного ключа.
Возвращает новый список, извлекая одноименное свойство из всех объектов переданного списка.
pluck работает не только с массивами, но и с любым функтором, поскольку эквивалентна R.map(R.prop(k), f).
См. также project, prop, props.
var getAges = R.pluck('age');
getAges([{name: 'fred', age: 29}, {name: 'wilma', age: 27}]); //=> [29, 27]
R.pluck(0, [[1, 2], [3, 4]]); //=> [1, 3]
R.pluck('val', {a: {val: 3}, b: {val: 5}}); //=> {a: 3, b: 5} prepend Добавлена в v0.1.0
a → [a] → [a]
Параметры
-
elЭлемент, который нужно добавить в начало выходного списка.
-
listМассив, который нужно добавить в конец выходного списка.
Возвращает
- Array Новый массив.
Возвращает новый список с заданным элементом в начале, за которым следуют элементы исходного списка.
См. также append.
R.prepend('fee', ['fi', 'fo', 'fum']); //=> ['fee', 'fi', 'fo', 'fum'] product Добавлена в v0.1.0
[Number] → Number
Параметры
-
listМассив чисел
Возвращает
- Number Произведение всех чисел в списке.
Перемножает все элементы списка.
См. также reduce.
R.product([2,4,6,8,100,1]); //=> 38400
project Добавлена в v0.1.0
[k] → [{k: v}] → [{k: v}] Параметры
-
propsИмена свойств для проекции
-
objsОбъекты для запроса
Возвращает
- Array Массив объектов, содержащих только свойства `props`.
Аналог оператора SQL select.
const abby = {name: 'Abby', age: 7, hair: 'blond', grade: 2};
const fred = {name: 'Fred', age: 12, hair: 'brown', grade: 7};
const kids = [abby, fred];
R.project(['name', 'grade'], kids); //=> [{name: 'Abby', grade: 2}, {name: 'Fred', grade: 7}] promap Добавлено в v0.28.0
(a → b) → (c → d) → (b → c) → (a → d)
Profunctor p => (a → b) → (c → d) → p b c → p a dПараметры
-
fФункция предварительной обработки, a -> b
-
gФункция последующей обработки, c -> d
-
profunctorЭкземпляр профунктора, к которому применяется promap, например b -> c
Возвращает
- Profunctor Новый экземпляр профунктора, например a -> d
Принимает две функции — предварительной и последующей обработки — для третьей функции, то есть promap(f, g, h)(x) === g(h(f(x))).
Если метод присутствует, вызывает метод promap третьего аргумента согласно спецификации Profunctor FantasyLand.
Работает как трансдьюсер, если в качестве аргумента профунктора передан трансформер.
См. также transduce.
const decodeChar = R.promap(s => s.charCodeAt(), String.fromCharCode, R.add(-8))
const decodeString = R.promap(R.split(''), R.join(''), R.map(decodeChar))
decodeString("ziuli") //=> "ramda" prop Добавлено в v0.1.0
Idx → {s: a} → a | Undefined Idx = String | Int | SymbolПараметры
-
pИмя свойства или индекс массива
-
objОбъект для запроса
Возвращает
- * Значение свойства `obj.p`.
Возвращает функцию, которая при получении объекта возвращает указанное свойство этого объекта, если оно существует.
См. также path, props, pluck, project, nth.
R.prop('x', {x: 100}); //=> 100
R.prop('x', {}); //=> undefined
R.prop(0, [100]); //=> 100
R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4 propEq Добавлено в v0.1.0
a → String → Object → Boolean
Параметры
-
valЗначение для сравнения со свойством
-
nameключ указанного свойства объекта
-
objОбъект, в котором нужно проверить свойство
Возвращает
- Boolean `true`, если значение равно указанному свойству объекта, в противном случае `false`.
Возвращает true, если указанное свойство объекта равно заданному значению в терминах R.equals; в противном случае — false. Проверить несколько свойств можно с помощью R.whereEq, а свойство по вложенному пути — с помощью R.pathEq.
См. также whereEq, pathEq, propSatisfies, equals.
const abby = {name: 'Abby', age: 7, hair: 'blond'};
const fred = {name: 'Fred', age: 12, hair: 'brown'};
const rusty = {name: 'Rusty', age: 10, hair: 'brown'};
const alois = {name: 'Alois', age: 15, disposition: 'surly'};
const kids = [abby, fred, rusty, alois];
const hasBrownHair = R.propEq('brown', 'hair');
R.filter(hasBrownHair, kids); //=> [fred, rusty] propIs Добавлено в v0.16.0
Type → String → Object → Boolean
Параметры
-
type -
name -
obj
Возвращает
- Boolean
Возвращает true, если указанное свойство объекта имеет заданный тип; в противном случае — false.
См. также is, propSatisfies.
R.propIs(Number, 'x', {x: 1, y: 2}); //=> true
R.propIs(Number, 'x', {x: 'foo'}); //=> false
R.propIs(Number, 'x', {}); //=> false propOr Добавлено в v0.6.0
a → String → Object → a
Параметры
-
valЗначение по умолчанию.
-
pИмя свойства, которое нужно вернуть.
-
objОбъект для запроса.
Возвращает
- * Значение заданного свойства переданного объекта или значение по умолчанию.
Возвращает указанное свойство заданного объекта, если объект не равен null, свойство присутствует, а его значение не является null, undefined или NaN.
В противном случае возвращается первый аргумент.
const alice = {
name: 'ALICE',
age: 101
};
const favorite = R.prop('favoriteLibrary');
const favoriteWithDefault = R.propOr('Ramda', 'favoriteLibrary');
favorite(alice); //=> undefined
favoriteWithDefault(alice); //=> 'Ramda' props Добавлено в v0.1.0
[k] → {k: v} → [v] Параметры
-
ps -
objОбъект для запроса
Возвращает
- Array Соответствующие значения или частично применённая функция.
Работает как несколько prop: на входе массив ключей, на выходе массив значений. Порядок сохраняется.
См. также prop, pluck, project.
R.props(['x', 'y'], {x: 1, y: 2}); //=> [1, 2]
R.props(['c', 'a', 'b'], {b: 2, a: 1}); //=> [undefined, 1, 2]
const fullName = R.compose(R.join(' '), R.props(['first', 'last']));
fullName({last: 'Bullet-Tooth', age: 33, first: 'Tony'}); //=> 'Tony Bullet-Tooth' propSatisfies Добавлено в v0.16.0
(a → Boolean) → String → {String: a} → Boolean Параметры
-
pred -
name -
obj
Возвращает
- Boolean
Возвращает true, если указанное свойство объекта удовлетворяет заданному предикату; в противном случае — false. Проверить несколько свойств можно с помощью R.where.
См. также where, propEq, propIs.
R.propSatisfies(x => x > 0, 'x', {x: 1, y: 2}); //=> true range Добавлено в v0.1.0
Number → Number → [Number]
Параметры
-
fromПервое число в списке.
-
toЧисло, следующее за последним числом в списке.
Возвращает
- Array Список чисел из множества `[a, b)`.
Возвращает список чисел от from (включительно) до to (не включая).
R.range(1, 5); //=> [1, 2, 3, 4] R.range(50, 53); //=> [50, 51, 52]
rebuild Добавлено в v0.31.0
([String, a] → [[String, b]]) → {k: a} → {k: b} Параметры
-
convertФункция, преобразующая ключ и значение в массив пар ключ-значение.
-
objСтруктура для преобразования
Возвращает
- Array Новый объект, пары ключ-значение которого являются результатом применения функции `convert` к каждой паре ключ-значение в `obj`.
Преобразует объект в новый: для каждой пары ключ-значение применяет функцию, создающую ноль, одну или несколько новых пар ключ-значение, и объединяет результаты в один объект.
См. также map, mapKeys, renameKeys.
R.rebuild((k, v) => [[k.toUpperCase(), v * v]], {a: 1, b: 2, c: 3}) //=> {A: 1, B: 4, C: 9} reduce Добавлено в v0.1.0
((a, b) → a) → a → [b] → a
Параметры
-
fnФункция итератора. Получает два значения: аккумулятор и текущий элемент массива.
-
accЗначение аккумулятора.
-
listСписок для обхода.
Возвращает
- * Итоговое накопленное значение.
Возвращает один элемент, проходя по списку и последовательно вызывая функцию итератора, передавая ей значение аккумулятора и текущее значение массива, а затем передавая результат следующему вызову.
Функция итератора получает два значения: (acc, value). Для досрочного завершения итерации можно использовать R.reduced.
Порядок аргументов функции итератора reduceRight — (value, acc).
Примечание: R.reduce не пропускает удалённые или не присвоенные индексы (разреженные массивы), в отличие от встроенного метода Array.prototype.reduce. Подробнее об этом поведении см. в разделе: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description
Будьте осторожны, изменяя и возвращая аккумулятор. Если повторно использовать его при последующих вызовах, новое значение будет накапливаться в том же объекте. В общем случае рекомендуется всегда возвращать новое значение. Если по соображениям производительности это невозможно, обязательно переинициализируйте аккумулятор при каждом вызове.
Если метод присутствует, вызывает метод reduce третьего аргумента. При этом пользователь должен самостоятельно обработать досрочное завершение R.reduced, поскольку reduce его не реализует.
См. также reduced, addIndex, reduceRight.
R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10 // - -10 // / \ / \ // - 4 -6 4 // / \ / \ // - 3 ==> -3 3 // / \ / \ // - 2 -1 2 // / \ / \ // 0 1 0 1
reduceBy Добавлено в v0.20.0
((a, b) → a) → a → (b → String) → [b] → {String: a} Параметры
-
valueFnФункция, сводящая элементы каждой группы к одному значению. Получает два значения: аккумулятор конкретной группы и текущий элемент.
-
acc(Начальное) значение аккумулятора для каждой группы.
-
keyFnФункция, преобразующая элемент списка в ключ.
-
listМассив для группировки.
Возвращает
- Object Объект, в котором ключами являются результаты `keyFn`, а значениями — результаты `valueFn` для элементов, для которых вызов `keyFn` вернул соответствующий ключ.
Группирует элементы списка по результату вызова возвращающей строку функции keyFn для каждого элемента и сводит элементы каждой группы к одному значению с помощью функции-редьюсера valueFn.
Функция обработки значения получает два значения: (acc, value). Для досрочного завершения итерации можно использовать R.reduced.
По сути, эта функция представляет собой более обобщённую версию функции groupBy.
Работает как трансдьюсер, если в качестве списка передан трансформер.
См. также groupBy, reduce, reduced.
const groupNames = (acc, {name}) => acc.concat(name)
const toGrade = ({score}) =>
score < 65 ? 'F' :
score < 70 ? 'D' :
score < 80 ? 'C' :
score < 90 ? 'B' : 'A'
var students = [
{name: 'Abby', score: 83},
{name: 'Bart', score: 62},
{name: 'Curt', score: 88},
{name: 'Dora', score: 92},
]
reduceBy(groupNames, [], toGrade, students)
//=> {"A": ["Dora"], "B": ["Abby", "Curt"], "F": ["Bart"]} reduced Добавлено в v0.15.0
a → *
Параметры
-
xИтоговое значение reduce.
Возвращает
- * Обёрнутое значение.
Возвращает обёрнутое значение, указывающее на то, что это итоговое значение функций reduce и transduce. Возвращаемое значение следует считать чёрным ящиком: стабильность его внутренней структуры не гарантируется.
Эта оптимизация доступна следующим функциям:
См. также reduce, reduceWhile, reduceBy, reduceRight, transduce.
R.reduce( (acc, item) => item > 3 ? R.reduced(acc) : acc.concat(item), [], [1, 2, 3, 4, 5]) // [1, 2, 3]
reduceRight Добавлено в v0.1.0
((a, b) → b) → b → [a] → b
Параметры
-
fnФункция итератора. Получает два значения: текущий элемент массива и аккумулятор.
-
accЗначение аккумулятора.
-
listСписок для обхода.
Возвращает
- * Итоговое накопленное значение.
Возвращает один элемент, проходя по списку и последовательно вызывая функцию итератора, передавая ей значение аккумулятора и текущее значение массива, а затем передавая результат следующему вызову.
Подобно reduce, но обходит входной список справа налево.
Функция итератора получает два значения: (value, acc), тогда как порядок аргументов функции итератора reduce — (acc, value). reduceRight может использовать reduced для досрочного завершения итерации.
Примечание: R.reduceRight не пропускает удалённые или не присвоенные индексы (разреженные массивы), в отличие от встроенного метода Array.prototype.reduceRight. Подробнее об этом поведении см. в разделе: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight#Description
Будьте осторожны, изменяя и возвращая аккумулятор. Если повторно использовать его при последующих вызовах, новое значение будет накапливаться в том же объекте. В общем случае рекомендуется всегда возвращать новое значение. Если по соображениям производительности это невозможно, обязательно переинициализируйте аккумулятор при каждом вызове.
См. также reduce, addIndex, reduced.
R.reduceRight(R.subtract, 0, [1, 2, 3, 4]) // => (1 - (2 - (3 - (4 - 0)))) = -2 // - -2 // / \ / \ // 1 - 1 3 // / \ / \ // 2 - ==> 2 -1 // / \ / \ // 3 - 3 4 // / \ / \ // 4 0 4 0
reduceWhile Добавлено в v0.22.0
((a, b) → Boolean) → ((a, b) → a) → a → [b] → a
Параметры
-
predПредикат. Ему передаются аккумулятор и текущий элемент.
-
fnФункция итератора. Получает два значения: аккумулятор и текущий элемент.
-
aЗначение аккумулятора.
-
listСписок для обхода.
Возвращает
- * Итоговое накопленное значение.
Как и reduce, reduceWhile возвращает один элемент, последовательно вызывая функцию итератора при обходе списка. reduceWhile также принимает предикат, который проверяется перед каждым шагом. Если предикат возвращает false, итерация досрочно завершается, и возвращается текущее значение аккумулятора. reduceWhile также можно досрочно завершить с помощью reduced.
const isOdd = (acc, x) => x % 2 !== 0; const xs = [1, 3, 5, 60, 777, 800]; R.reduceWhile(isOdd, R.add, 0, xs); //=> 9 const ys = [2, 4, 6] R.reduceWhile(isOdd, R.add, 111, ys); //=> 111
reject Добавлено в v0.1.0
Filterable f => (a → Boolean) → f a → f a
Параметры
-
pred -
filterable
Возвращает
- Array
Дополнение к filter.
Работает как трансдьюсер, если в качестве списка передан трансформер. Фильтруемыми объектами могут быть обычные объекты или любые объекты с методом filter, например Array.
См. также filter, transduce, addIndex.
const isOdd = (n) => n % 2 !== 0;
R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]
R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4} remove Добавлено в v0.2.2
Number → Number → [a] → [a]
Параметры
-
startПозиция, с которой начинается удаление элементов
-
countКоличество удаляемых элементов
-
listСписок, из которого нужно удалить элементы
Возвращает
- Array Новый Array без `count` элементов, начиная с `start`.
Удаляет подсписок из list, начиная с индекса start и содержащий count элементов. Обратите внимание: исходный список не изменяется — функция возвращает его копию с внесёнными изменениями. При использовании этой функции ни один список не пострадал.
См. также without.
R.remove(2, 3, [1,2,3,4,5,6,7,8]); //=> [1,2,6,7,8]
renameKeys Добавлено в v0.31.0
Object → Object → Object
Параметры
-
mappingОбъект, сопоставляющий существующие ключи новым
-
objЦелевой объект для преобразования
Возвращает
- Object Результат замены существующих ключей соответствующими значениями из объекта сопоставления, если они найдены
Преобразует объект в новый, заменяя все ключи, совпадающие с ключами объекта сопоставления, соответствующими значениями из этого объекта.
var mapping = { name: 'firstName', address: 'street' };
var obj = { name: 'John', city: 'Paris' };
R.renameKeys(mapping, obj) //=> { firstName: 'John', city: 'Paris' } repeat Добавлено в v0.1.1
a → n → [a]
Параметры
-
valueПовторяемое значение.
-
nТребуемый размер выходного списка.
Возвращает
- Array Новый массив, содержащий `n` значений `value`.
Возвращает список фиксированного размера n, содержащий заданное повторяющееся значение.
См. также times.
R.repeat('hi', 5); //=> ['hi', 'hi', 'hi', 'hi', 'hi']
const obj = {};
const repeatedObjs = R.repeat(obj, 5); //=> [{}, {}, {}, {}, {}]
repeatedObjs[0] === repeatedObjs[1]; //=> true replace Добавлено в v0.7.0
RegExp|String → String → String → String
Параметры
-
patternРегулярное выражение или подстрока для поиска.
-
replacementСтрока, которой нужно заменить найденные совпадения.
-
strСтрока для поиска и замены.
Возвращает
- String Результат.
Заменяет подстроку или совпадение с регулярным выражением в строке на строку замены.
Первые два параметра соответствуют параметрам функции String.prototype.replace(), поэтому второй параметр также может быть функцией.
R.replace('foo', 'bar', 'foo foo foo'); //=> 'bar foo foo'
R.replace(/foo/, 'bar', 'foo foo foo'); //=> 'bar foo foo'
// Use the "g" (global) flag to replace all occurrences:
R.replace(/foo/g, 'bar', 'foo foo foo'); //=> 'bar bar bar' reverse Добавлено в v0.1.0
[a] → [a]
String → StringПараметры
-
list
Возвращает
- Array
Возвращает новый список или строку с элементами или символами в обратном порядке.
R.reverse([1, 2, 3]); //=> [3, 2, 1]
R.reverse([1, 2]); //=> [2, 1]
R.reverse([1]); //=> [1]
R.reverse([]); //=> []
R.reverse('abc'); //=> 'cba'
R.reverse('ab'); //=> 'ba'
R.reverse('a'); //=> 'a'
R.reverse(''); //=> '' scan Добавлено в v0.10.0
((a, b) → a) → a → [b] → [a]
Параметры
-
fnФункция итератора. Получает два значения: аккумулятор и текущий элемент массива
-
accЗначение аккумулятора.
-
listСписок для обхода.
Возвращает
- Array Список всех промежуточных результатов свёртки.
Scan похожа на reduce, но возвращает список последовательно вычисленных слева направо результатов свёртки.
Работает как трансдьюсер, если в качестве списка передан трансформер.
const numbers = [1, 2, 3, 4]; const factorials = R.scan(R.multiply, 1, numbers); //=> [1, 1, 2, 6, 24]
sequence Добавлено в v0.19.0
fantasy-land/of :: TypeRep f => f ~> a → f a
(Applicative f, Traversable t) => TypeRep f → t (f a) → f (t a)(Applicative f, Traversable t) => (a → f a) → t (f a) → f (t a)Параметры
-
TypeRepresentativeс методом
ofилиfantasy-land/of -
traversable
Возвращает
- *
Преобразует Traversable из Applicative в Applicative из Traversable.
Если метод присутствует, вызывает метод "fantasy-land/traverse" или traverse второго аргумента.
См. также traverse.
R.sequence(Maybe.of, [Just(1), Just(2), Just(3)]); //=> Just([1, 2, 3]) R.sequence(Maybe.of, [Just(1), Just(2), Nothing()]); //=> Nothing() R.sequence(R.of(Array), Just([1, 2, 3])); //=> [Just(1), Just(2), Just(3)] R.sequence(R.of(Array), Nothing()); //=> [Nothing()]
set Добавлено в v0.16.0
Lens s a → a → s → s
Lens s a = Functor f => (a → f a) → s → f sПараметры
-
lens -
v -
x
Возвращает
- *
Возвращает результат «установки» заданного значения в часть переданной структуры данных, на которую указывает заданная линза.
См. также view, over, lens, lensIndex, lensProp, lensPath.
const xLens = R.lensProp('x');
R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}
R.set(xLens, 8, {x: 1, y: 2}); //=> {x: 8, y: 2} slice Добавлено в v0.1.4
Number → Number → [a] → [a]
Number → Number → String → StringПараметры
-
fromIndexНачальный индекс (включительно).
-
toIndexКонечный индекс (не включая).
-
list
Возвращает
- *
Возвращает элементы заданного списка или строки (либо объекта с методом slice) от fromIndex (включительно) до toIndex (не включая).
Если метод присутствует, вызывает метод slice третьего аргумента.
R.slice(1, 3, ['a', 'b', 'c', 'd']); //=> ['b', 'c'] R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd'] R.slice(0, -1, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c'] R.slice(-3, -1, ['a', 'b', 'c', 'd']); //=> ['b', 'c'] R.slice(0, 3, 'ramda'); //=> 'ram'
sort Добавлено в v0.1.0
((a, a) → Number) → [a] → [a]
Параметры
-
comparatorФункция сортировки :: a -> b -> Int
-
listСписок для сортировки
Возвращает
- Array Новый массив, элементы которого отсортированы функцией сравнения.
Возвращает копию списка, отсортированную функцией сравнения, которая должна принимать два значения и возвращать отрицательное число, если первое значение меньше второго, положительное — если больше, и ноль, если они равны. Обратите внимание: возвращается копия списка. Исходный список не изменяется.
const diff = function(a, b) { return a - b; };
R.sort(diff, [4,2,7,5]); //=> [2, 4, 5, 7] sortBy Добавлено в v0.1.0
Ord b => (a → b) → [a] → [a]
Параметры
-
fn -
listСписок для сортировки.
Возвращает
- Array Новый список, отсортированный по ключам, созданным функцией `fn`.
Сортирует список согласно переданной функции.
const sortByFirstItem = R.sortBy(R.prop(0));
const pairs = [[-1, 1], [-2, 2], [-3, 3]];
sortByFirstItem(pairs); //=> [[-3, 3], [-2, 2], [-1, 1]]
const sortByNameCaseInsensitive = R.sortBy(R.compose(R.toLower, R.prop('name')));
const alice = {
name: 'ALICE',
age: 101
};
const bob = {
name: 'Bob',
age: -10
};
const clara = {
name: 'clara',
age: 314.159
};
const people = [clara, bob, alice];
sortByNameCaseInsensitive(people); //=> [alice, bob, clara] sortWith Добавлено в v0.23.0
[(a, a) → Number] → [a] → [a]
Параметры
-
functionsСписок функций сравнения.
-
listСписок для сортировки.
Возвращает
- Array Новый список, отсортированный согласно функциям сравнения.
Сортирует список согласно списку функций сравнения.
const alice = {
name: 'alice',
age: 40
};
const bob = {
name: 'bob',
age: 30
};
const clara = {
name: 'clara',
age: 40
};
const people = [clara, bob, alice];
const ageNameSort = R.sortWith([
R.descend(R.prop('age')),
R.ascend(R.prop('name'))
]);
ageNameSort(people); //=> [alice, clara, bob] split Добавлено в v0.1.0
(String | RegExp) → String → [String]
Параметры
-
sepШаблон.
-
strСтрока для разделения на массив.
Возвращает
- Array Массив строк из `str`, разделённых с помощью `sep`.
Разбивает строку на массив строк по заданному разделителю.
См. также join.
const pathComponents = R.split('/');
R.tail(pathComponents('/usr/local/bin/node')); //=> ['usr', 'local', 'bin', 'node']
R.split('.', 'a.b.c.xyz.d'); //=> ['a', 'b', 'c', 'xyz', 'd'] splitAt Добавлено в v0.19.0
Number → [a] → [[a], [a]]
Number → String → [String, String]Параметры
-
indexИндекс, по которому разделяется массив или строка.
-
arrayМассив или строка для разделения.
Возвращает
- Array
Разделяет заданный список или строку по указанному индексу.
R.splitAt(1, [1, 2, 3]); //=> [[1], [2, 3]] R.splitAt(5, 'hello world'); //=> ['hello', ' world'] R.splitAt(-1, 'foobar'); //=> ['fooba', 'r']
splitEvery Добавлено в v0.16.0
Number → [a] → [[a]]
Number → String → [String]Параметры
-
n -
list
Возвращает
- Array
Разбивает коллекцию на фрагменты заданной длины.
R.splitEvery(3, [1, 2, 3, 4, 5, 6, 7]); //=> [[1, 2, 3], [4, 5, 6], [7]] R.splitEvery(3, 'foobarbaz'); //=> ['foo', 'bar', 'baz']
splitWhen Добавлено в v0.19.0
(a → Boolean) → [a] → [[a], [a]]
Параметры
-
predПредикат, определяющий место разделения массива.
-
listМассив для разделения.
Возвращает
- Array
Принимает список и предикат, возвращает пару списков со следующими свойствами:
- результат объединения двух выходных списков эквивалентен входному списку;
- ни один элемент первого выходного списка не удовлетворяет предикату; и
- если второй выходной список не пуст, его первый элемент удовлетворяет предикату.
R.splitWhen(R.equals(2), [1, 2, 3, 1, 2, 3]); //=> [[1], [2, 3, 1, 2, 3]]
splitWhenever Добавлено в v0.28.0
(a → Boolean) → [a] → [[a]]
Параметры
-
predПредикат, определяющий, где разделяется массив.
-
listМассив, который нужно разделить.
Возвращает
- Array
Разбивает массив на фрагменты при каждом появлении указанного значения.
R.splitWhenever(R.equals(2), [1, 2, 3, 2, 4, 5, 2, 6, 7]); //=> [[1], [3], [4, 5], [6, 7]]
startsWith Добавлено в v0.24.0
[a] → [a] → Boolean
String → String → BooleanПараметры
-
prefix -
list
Возвращает
- Boolean
Проверяет, начинается ли список с указанного подсписка.
Аналогично проверяет, начинается ли строка с указанной подстроки.
См. также endsWith.
R.startsWith('a', 'abc') //=> true
R.startsWith('b', 'abc') //=> false
R.startsWith(['a'], ['a', 'b', 'c']) //=> true
R.startsWith(['b'], ['a', 'b', 'c']) //=> false subtract Добавлено в v0.1.0
Number → Number → Number
Параметры
-
aПервое значение.
-
bВторое значение.
Возвращает
- Number Результат `a - b`.
Вычитает второй аргумент из первого.
См. также add.
R.subtract(10, 8); //=> 2 const minus5 = R.subtract(R.__, 5); minus5(17); //=> 12 const complementaryAngle = R.subtract(90); complementaryAngle(30); //=> 60 complementaryAngle(72); //=> 18
sum Добавлено в v0.1.0
[Number] → Number
Параметры
-
listМассив чисел
Возвращает
- Number Сумма всех чисел в списке.
Складывает все элементы списка.
См. также reduce.
R.sum([2,4,6,8,100,1]); //=> 121
swap Добавлено в v0.29.0
Number → Number → [a] → [a]
Параметры
-
indexAПервый индекс
-
indexBВторой индекс
-
oОбъект или список, в котором выполняется перестановка
Возвращает
- Array Новый объект или список с переставленными элементами
Меняет местами элемент с индексом indexA и другой элемент с индексом indexB в объекте или списке элементов. Создаётся новый результат с элементами в новом порядке.
R.swap(0, 2, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['c', 'b', 'a', 'd', 'e', 'f']
R.swap(-1, 0, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['f', 'b', 'c', 'd', 'e', 'a']
R.swap('a', 'b', {a: 1, b: 2}); //=> {a: 2, b: 1}
R.swap(0, 2, 'foo'); //=> 'oof' symmetricDifference Добавлено в v0.19.0
[*] → [*] → [*]
Параметры
-
list1Первый список.
-
list2Второй список.
Возвращает
- Array Элементы, присутствующие в `list1` или `list2`, но не в обоих списках одновременно.
Находит множество (то есть без дубликатов) всех элементов, содержащихся в первом или втором списке, но не в обоих одновременно.
См. также symmetricDifferenceWith, difference, differenceWith.
R.symmetricDifference([1,2,3,4], [7,6,5,4,3]); //=> [1,2,7,6,5] R.symmetricDifference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5,1,2]
symmetricDifferenceWith Добавлено в v0.19.0
((a, a) → Boolean) → [a] → [a] → [a]
Параметры
-
predПредикат, используемый для проверки равенства двух элементов.
-
list1Первый список.
-
list2Второй список.
Возвращает
- Array Элементы, присутствующие в `list1` или `list2`, но не в обоих списках одновременно.
Находит множество (то есть без дубликатов) всех элементов, содержащихся в первом или втором списке, но не в обоих одновременно. Дубликаты определяются по значению, возвращаемому при применении переданного предиката к двум элементам списка.
См. также symmetricDifference, difference, differenceWith.
const eqA = R.eqBy(R.prop('a'));
const l1 = [{a: 1}, {a: 2}, {a: 3}, {a: 4}];
const l2 = [{a: 3}, {a: 4}, {a: 5}, {a: 6}];
R.symmetricDifferenceWith(eqA, l1, l2); //=> [{a: 1}, {a: 2}, {a: 5}, {a: 6}] T Добавлено в v0.9.0
* → Boolean
Параметры
Возвращает
- Boolean
Функция, всегда возвращающая true. Переданные параметры игнорируются.
См. также F.
R.T(); //=> true
tail Добавлено в v0.1.0
[a] → [a]
String → StringПараметры
-
list
Возвращает
- *
Возвращает все элементы заданного списка или строки, кроме первого (либо объект с методом tail).
Если у первого аргумента есть метод slice, вызывает его.
R.tail([1, 2, 3]); //=> [2, 3]
R.tail([1, 2]); //=> [2]
R.tail([1]); //=> []
R.tail([]); //=> []
R.tail('abc'); //=> 'bc'
R.tail('ab'); //=> 'b'
R.tail('a'); //=> ''
R.tail(''); //=> '' take Добавлено в v0.1.0
Number → [a] → [a]
Number → String → StringПараметры
-
n -
list
Возвращает
- *
Возвращает первые n элементов заданного списка, строки или трансдьюсера/преобразователя (либо объекта с методом take).
Если у второго аргумента есть метод take, вызывает его.
См. также drop.
R.take(1, ['foo', 'bar', 'baz']); //=> ['foo'] R.take(2, ['foo', 'bar', 'baz']); //=> ['foo', 'bar'] R.take(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] R.take(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] R.take(3, 'ramda'); //=> 'ram' const personnel = [ 'Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan', 'Bob Bates', 'Joe Dodge', 'Ron Crotty' ]; const takeFive = R.take(5); takeFive(personnel); //=> ['Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan']
takeLast Добавлено в v0.16.0
Number → [a] → [a]
Number → String → StringПараметры
-
nКоличество возвращаемых элементов.
-
xsРассматриваемая коллекция.
Возвращает
- Array
Возвращает новый список, содержащий последние n элементов заданного списка. Если n > list.length, возвращает список из list.length элементов.
См. также dropLast.
R.takeLast(1, ['foo', 'bar', 'baz']); //=> ['baz'] R.takeLast(2, ['foo', 'bar', 'baz']); //=> ['bar', 'baz'] R.takeLast(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] R.takeLast(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] R.takeLast(3, 'ramda'); //=> 'mda'
takeLastWhile Добавлено в v0.16.0
(a → Boolean) → [a] → [a]
(a → Boolean) → String → StringПараметры
-
fnФункция, вызываемая на каждой итерации.
-
xsКоллекция для обхода.
Возвращает
- Array Новый массив.
Возвращает новый список, содержащий последние n элементов заданного списка. Каждое значение передаётся указанной функции-предикату; обход прекращается, когда функция-предикат возвращает false. Элемент, на котором функция-предикат завершила проверку, не включается. Функция-предикат получает один аргумент: (value).
См. также dropLastWhile, addIndex.
const isNotOne = x => x !== 1; R.takeLastWhile(isNotOne, [1, 2, 3, 4]); //=> [2, 3, 4] R.takeLastWhile(x => x !== 'R' , 'Ramda'); //=> 'amda'
takeWhile Добавлено в v0.1.0
(a → Boolean) → [a] → [a]
(a → Boolean) → String → StringПараметры
-
fnФункция, вызываемая на каждой итерации.
-
xsКоллекция для обхода.
Возвращает
- Array Новый массив.
Возвращает новый список, содержащий первые n элементов заданного списка. Каждое значение передаётся указанной функции-предикату; обход прекращается, когда функция-предикат возвращает false. Элемент, на котором функция-предикат завершила проверку, не включается. Функция-предикат получает один аргумент: (value).
Если у второго аргумента есть метод takeWhile, вызывает его.
Работает как трансдьюсер, если на месте списка передан преобразователь.
См. также dropWhile, transduce, addIndex.
const isNotFour = x => x !== 4; R.takeWhile(isNotFour, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3] R.takeWhile(x => x !== 'd' , 'Ramda'); //=> 'Ram'
tap Добавлено в v0.1.0
(a → *) → a → a
Параметры
-
fnФункция, вызываемая с аргументом
x. Возвращаемое значениеfnбудет отброшено. -
x
Возвращает
- * `x`.
Вызывает заданную функцию с переданным объектом, а затем возвращает этот объект.
Работает как трансдьюсер, если вторым параметром передан преобразователь.
const sayX = x => console.log('x is ' + x);
R.tap(sayX, 100); //=> 100
// logs 'x is 100' test Добавлено в v0.12.0
RegExp → String → Boolean
Параметры
-
pattern -
str
Возвращает
- Boolean
Определяет, соответствует ли заданная строка заданному регулярному выражению.
См. также match.
R.test(/^x/, 'xyz'); //=> true R.test(/^y/, 'xyz'); //=> false
thunkify Добавлено в v0.26.0
((a, b, …, j) → k) → (a, b, …, j) → (() → k)
Параметры
-
fnФункция, которую нужно обернуть в thunk
Возвращает
- function Принимает аргументы для `fn` и возвращает новую функцию, которая при вызове передаёт эти аргументы в `fn`.
Создаёт thunk из функции. Thunk откладывает вычисление до тех пор, пока не понадобится его результат, обеспечивая ленивое вычисление аргументов.
См. также partial, partialRight.
R.thunkify(R.identity)(42)(); //=> 42 R.thunkify((a, b) => a + b)(25, 17)(); //=> 42
times Добавлено в v0.2.3
(Number → a) → Number → [a]
Параметры
-
fnВызываемая функция. Получает один аргумент — текущее значение
n. -
nЗначение между
0иn - 1. Увеличивается после каждого вызова функции.
Возвращает
- Array Массив, содержащий возвращаемые значения всех вызовов `fn`.
Вызывает переданную функцию n раз и возвращает массив с результатами этих вызовов.
fn получает один аргумент: текущее значение n, которое начинается с 0 и постепенно увеличивается до n - 1.
См. также repeat.
R.times(R.identity, 5); //=> [0, 1, 2, 3, 4]
toLower Добавлено в v0.9.0
String → String
Параметры
-
strСтрока, которую нужно преобразовать в нижний регистр.
Возвращает
- String Строка `str` в нижнем регистре.
Возвращает строку в нижнем регистре.
См. также toUpper.
R.toLower('XYZ'); //=> 'xyz' toPairs Добавлено в v0.4.0
{String: *} → [[String,*]] Параметры
-
objОбъект, из которого извлекаются данные
Возвращает
- Array Массив пар ключ-значение из собственных свойств объекта.
Преобразует объект в массив пар ключ-значение. Используются только собственные свойства объекта. Обратите внимание, что порядок элементов выходного массива может различаться на разных платформах JS.
См. также fromPairs, keys, values.
R.toPairs({a: 1, b: 2, c: 3}); //=> [['a', 1], ['b', 2], ['c', 3]] toPairsIn Добавлено в v0.4.0
{String: *} → [[String,*]] Параметры
-
objОбъект, из которого извлекаются данные
Возвращает
- Array Массив пар ключ-значение из собственных свойств объекта и свойств его прототипа.
Преобразует объект в массив пар ключ-значение. Используются собственные свойства объекта и свойства его прототипа. Обратите внимание, что порядок элементов выходного массива может различаться на разных платформах JS.
const F = function() { this.x = 'X'; };
F.prototype.y = 'Y';
const f = new F();
R.toPairsIn(f); //=> [['x','X'], ['y','Y']] toString Добавлено в v0.14.0
* → String
Параметры
-
val
Возвращает
- String
Возвращает строковое представление заданного значения. eval строки в строку должно давать значение, эквивалентное исходному. Многие встроенные методы toString этому требованию не соответствуют.
Если заданное значение является [object Object] с методом toString, отличным от Object.prototype.toString, этот метод вызывается без аргументов для получения возвращаемого значения. Это означает, что пользовательские функции-конструкторы могут предоставлять подходящий метод toString. Например:
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function() {
return 'new Point(' + this.x + ', ' + this.y + ')';
};
R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'
R.toString(42); //=> '42'
R.toString('abc'); //=> '"abc"'
R.toString([1, 2, 3]); //=> '[1, 2, 3]'
R.toString({foo: 1, bar: 2, baz: 3}); //=> '{"bar": 2, "baz": 3, "foo": 1}'
R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date("2001-02-03T04:05:06.000Z")' toUpper Добавлено в v0.9.0
String → String
Параметры
-
strСтрока, которую нужно преобразовать в верхний регистр.
Возвращает
- String Строка `str` в верхнем регистре.
Возвращает строку в верхнем регистре.
См. также toLower.
R.toUpper('abc'); //=> 'ABC' transduce Добавлено в v0.12.0
(c → c) → ((a, b) → a) → a → [b] → a
Параметры
-
xfФункция-трансдьюсер. Получает преобразователь и возвращает преобразователь.
-
fnФункция-итератор. Получает два значения: аккумулятор и текущий элемент массива. При необходимости оборачивается в преобразователь и используется для инициализации трансдьюсера.
-
accНачальное значение аккумулятора.
-
listСписок для обхода.
Возвращает
- * Итоговое накопленное значение.
Инициализирует трансдьюсер с помощью переданной функции-итератора. Возвращает один элемент, обходя список и последовательно вызывая преобразованную функцию-итератор, передавая ей значение аккумулятора и текущее значение массива, а затем передавая результат следующему вызову.
Функция-итератор получает два значения: (acc, value). Она оборачивается в преобразователь для инициализации трансдьюсера. Вместо функции-итератора можно напрямую передать преобразователь. В обоих случаях обход можно досрочно остановить с помощью функции R.reduced.
Трансдьюсер — это функция, которая принимает преобразователь, возвращает преобразователь и может быть непосредственно скомпонована с другими функциями.
Преобразователь — это объект, предоставляющий редуцирующую функцию-итератор с арностью 2 (step), функцию начального значения с арностью 0 (init) и функцию извлечения результата с арностью 1 (result). Функция step используется как функция-итератор в reduce. Функция result преобразует итоговый аккумулятор в возвращаемый тип и в большинстве случаев является R.identity. Функция init может использоваться для задания начального значения аккумулятора, но в transduce она игнорируется.
После инициализации трансдьюсера обход выполняется с помощью R.reduce.
См. также reduce, reduced, into.
const numbers = [1, 2, 3, 4]; const transducer = R.compose(R.map(R.add(1)), R.take(2)); R.transduce(transducer, R.flip(R.append), [], numbers); //=> [2, 3] const isOdd = (x) => x % 2 !== 0; const firstOddTransducer = R.compose(R.filter(isOdd), R.take(1)); R.transduce(firstOddTransducer, R.flip(R.append), [], R.range(0, 100)); //=> [1]
transpose Добавлено в v0.19.0
[[a]] → [[a]]
Параметры
-
listДвумерный список
Возвращает
- Array Двумерный список
Меняет местами строки и столбцы двумерного списка. При передаче списка из n списков длины x возвращает список из x списков длины n.
R.transpose([[1, 'a'], [2, 'b'], [3, 'c']]) //=> [[1, 2, 3], ['a', 'b', 'c']] R.transpose([[1, 2, 3], ['a', 'b', 'c']]) //=> [[1, 'a'], [2, 'b'], [3, 'c']] // If some of the rows are shorter than the following rows, their elements are skipped: R.transpose([[10, 11], [20], [], [30, 31, 32]]) //=> [[10, 20, 30], [11, 31], [32]]
traverse Добавлено в v0.19.0
fantasy-land/of :: TypeRep f => f ~> a → f a
(Applicative f, Traversable t) => TypeRep f → (a → f b) → t a → f (t b)(Applicative f, Traversable t) => (b → f b) → (a → f b) → t a → f (t b)Параметры
-
TypeRepresentativeс методом
ofилиfantasy-land/of -
f -
traversable
Возвращает
- *
Применяет функцию, возвращающую аппликативный функтор, к обходному функтору, а затем использует sequence, чтобы преобразовать полученный обходной функтор аппликативных функторов в аппликативный функтор обходного функтора.
Если у третьего аргумента есть метод traverse, вызывает его.
См. также sequence.
// Returns `Maybe.Nothing` if the given divisor is `0`
const safeDiv = n => d => d === 0 ? Maybe.Nothing() : Maybe.Just(n / d)
R.traverse(Maybe.of, safeDiv(10), [2, 4, 5]); //=> Maybe.Just([5, 2.5, 2])
R.traverse(Maybe.of, safeDiv(10), [2, 0, 5]); //=> Maybe.Nothing
// Using a Type Representative
R.traverse(Maybe, safeDiv(10), Right(4)); //=> Just(Right(2.5))
R.traverse(Maybe, safeDiv(10), Right(0)); //=> Nothing
R.traverse(Maybe, safeDiv(10), Left("X")); //=> Just(Left("X")) trim Добавлено в v0.6.0
String → String
Параметры
-
strСтрока, из которой нужно удалить пробельные символы.
Возвращает
- String Строка `str` без пробельных символов по краям.
Удаляет пробельные символы с обоих концов строки.
R.trim(' xyz '); //=> 'xyz'
R.map(R.trim, R.split(',', 'x, y, z')); //=> ['x', 'y', 'z'] tryCatch Добавлено в v0.20.0
(…x → a) → ((e, …x) → a) → (…x → a)
Параметры
-
tryerФункция, которая может выбросить исключение.
-
catcherФункция, которая будет выполнена, если
tryerвыбросит исключение.
Возвращает
- function Новая функция, которая перехватывает исключения и передаёт их обработчику.
tryCatch принимает две функции: tryer и catcher. Возвращённая функция выполняет tryer; если исключение не выбрасывается, она просто возвращает результат. Если tryer всё же выбрасывает исключение, возвращённая функция выполняет функцию catcher и возвращает её результат. Для эффективной композиции с этой функцией обе функции — tryer и catcher — должны возвращать результаты одного типа.
R.tryCatch(R.prop('x'), R.F)({x: true}); //=> true
R.tryCatch(() => { throw 'foo'}, R.always('caught'))('bar') // =>
'caught'
R.tryCatch(R.times(R.identity), R.always([]))('s') // => []
R.tryCatch(() => { throw 'this is not a valid value'}, (err, value)=>({error : err, value }))('bar') // => {'error': 'this is not a valid value', 'value': 'bar'} type Добавлено в v0.8.0
* → String
Параметры
-
valПроверяемое значение
Возвращает
- String
Возвращает однословное строковое описание (нативного) типа значения, например 'Object', 'Number', 'Array' или 'Null'. Не пытается дополнительно различать пользовательские типы Object, сообщая для всех них 'Object'.
R.type({}); //=> "Object"
R.type(1); //=> "Number"
R.type(false); //=> "Boolean"
R.type('s'); //=> "String"
R.type(null); //=> "Null"
R.type([]); //=> "Array"
R.type(/[A-z]/); //=> "RegExp"
R.type(() => {}); //=> "Function"
R.type(async () => {}); //=> "AsyncFunction"
R.type(undefined); //=> "Undefined"
R.type(BigInt(123)); //=> "BigInt" unapply Добавлено в v0.8.0
([*…] → a) → (*… → a)
Параметры
-
fn
Возвращает
- function
Принимает функцию fn, которая получает один аргумент-массив, и возвращает функцию, которая:
- принимает любое количество позиционных аргументов;
- передаёт эти аргументы функции
fnв виде массива; и - возвращает результат.
Иными словами, R.unapply создаёт вариативную функцию на основе функции, принимающей массив. R.unapply — обратная функция к R.apply.
См. также apply.
R.unapply(JSON.stringify)(1, 2, 3); //=> '[1,2,3]'
unary Добавлено в v0.2.0
(a → b → c → … → z) → (a → z)
Параметры
-
fnФункция, которую нужно обернуть.
Возвращает
- function Новая функция-обёртка для `fn`. Гарантируется, что новая функция имеет арность 1.
Оборачивает функцию с любой арностью (в том числе нулевой) в функцию, принимающую ровно один параметр. Лишние параметры не передаются исходной функции.
const takesTwoArgs = function(a, b) {
return [a, b];
};
takesTwoArgs.length; //=> 2
takesTwoArgs(1, 2); //=> [1, 2]
const takesOneArg = R.unary(takesTwoArgs);
takesOneArg.length; //=> 1
// Only 1 argument is passed to the wrapped function
takesOneArg(1, 2); //=> [1, undefined] uncurryN Добавлено в v0.14.0
Number → (a → b → c … → z) → ((a → b → c …) → z)
Параметры
-
lengthАрность возвращаемой функции.
-
fnФункция, которую нужно раскаррировать.
Возвращает
- function Новая функция.
Возвращает функцию с арностью n на основе (вручную) каррированной функции. Обратите внимание: возвращаемая функция фактически является каррированной функцией в стиле Ramda, которая может принимать один или несколько аргументов при каждом вызове.
const addFour = a => b => c => d => a + b + c + d; const uncurriedAddFour = R.uncurryN(4, addFour); uncurriedAddFour(1, 2, 3, 4); //=> 10
unfold Добавлено в v0.10.0
(a → [b]) → * → [b]
Параметры
-
fnФункция-итератор. Получает один аргумент,
seed, и возвращает либо false для завершения итерации, либо массив длины два для продолжения. Элемент с индексом 0 этого массива добавляется в результирующий массив, а элемент с индексом 1 передаётся следующему вызовуfn. -
seedНачальное значение.
Возвращает
- Array Итоговый список.
Создаёт список из начального значения. Принимает функцию-итератор, которая возвращает либо false для остановки итерации, либо массив длины 2, содержащий значение для добавления в результирующий список и начальное значение для следующего вызова функции-итератора.
Функция-итератор получает один аргумент: (seed).
const f = n => n > 50 ? false : [-n, n + 10]; R.unfold(f, 10); //=> [-10, -20, -30, -40, -50]
union Добавлено в v0.1.0
[*] → [*] → [*]
Параметры
-
asПервый список.
-
bsВторой список.
Возвращает
- Array Первый и второй списки, объединённые с удалением дубликатов.
Объединяет два списка в множество (то есть без дубликатов), состоящее из элементов обоих списков.
R.union([1, 2, 3], [2, 3, 4]); //=> [1, 2, 3, 4]
unionWith Добавлено в v0.1.0
((a, a) → Boolean) → [*] → [*] → [*]
Параметры
-
predПредикат, используемый для проверки равенства двух элементов.
-
list1Первый список.
-
list2Второй список.
Возвращает
- Array Первый и второй списки, объединённые с удалением дубликатов.
Объединяет два списка в множество (то есть без дубликатов), состоящее из элементов обоих списков. Дубликаты определяются по значению, возвращаемому при применении переданного предиката к двум элементам списка. Если элемент есть в обоих списках, используется первое вхождение из первого списка.
См. также union.
const l1 = [{a: 1}, {a: 2}];
const l2 = [{a: 1}, {a: 4}];
R.unionWith(R.eqBy(R.prop('a')), l1, l2); //=> [{a: 1}, {a: 2}, {a: 4}] uniq Добавлено в v0.1.0
[a] → [a]
Параметры
-
listРассматриваемый массив.
Возвращает
- Array Список уникальных элементов.
Возвращает новый список, содержащий только по одной копии каждого элемента исходного списка. Для определения равенства используется R.equals.
R.uniq([1, 1, 2, 1]); //=> [1, 2] R.uniq([1, '1']); //=> [1, '1'] R.uniq([[42], [42]]); //=> [[42]]
uniqBy Добавлено в v0.16.0
(a → b) → [a] → [a]
Параметры
-
fnФункция, создающая значение для сравнения.
-
listРассматриваемый массив.
Возвращает
- Array Список уникальных элементов.
Возвращает новый список, содержащий только по одной копии каждого элемента исходного списка, основываясь на значении, полученном при применении переданной функции к каждому элементу списка. Если функция возвращает одинаковое значение для двух элементов, предпочтение отдаётся первому. Для сравнения используется R.equals.
Работает как трансдьюсер, если на месте списка передан преобразователь.
R.uniqBy(Math.abs, [-1, -5, 2, 10, 1, 2]); //=> [-1, -5, 2, 10]
uniqWith Добавлено в v0.2.0
((a, a) → Boolean) → [a] → [a]
Параметры
-
predПредикат, используемый для проверки равенства двух элементов.
-
listРассматриваемый массив.
Возвращает
- Array Список уникальных элементов.
Возвращает новый список, содержащий только по одной копии каждого элемента исходного списка, основываясь на значении, полученном при применении переданного предиката к двум элементам списка. Если согласно предикату два элемента равны, предпочтение отдаётся первому.
Работает как трансдьюсер, если на месте списка передан преобразователь.
const strEq = R.eqBy(String);
R.uniqWith(strEq)([1, '1', 2, 1]); //=> [1, 2]
R.uniqWith(strEq)([{}, {}]); //=> [{}]
R.uniqWith(strEq)([1, '1', 1]); //=> [1]
R.uniqWith(strEq)(['1', 1, 1]); //=> ['1'] unless Добавлено в v0.18.0
(a → Boolean) → (a → b) → a → a | b
Параметры
-
predФункция-предикат
-
whenFalseFnФункция, вызываемая, если
predвозвращает ложное значение. -
xОбъект для проверки функцией
predи передачи вwhenFalseFnпри необходимости.
Возвращает
- * Либо `x`, либо результат применения `x` к `whenFalseFn`.
Проверяет последний аргумент, передавая его указанной функции-предикату. Если предикат не выполняется, функция возвращает результат вызова функции whenFalseFn с тем же аргументом. Если предикат выполняется, аргумент возвращается без изменений.
let safeInc = R.unless(R.isNil, R.inc); safeInc(null); //=> null safeInc(1); //=> 2
unnest Добавлена в версии v0.3.0
Chain c => c (c a) → c a
Параметры
-
list
Возвращает
- *
Сокращённая форма для R.chain(R.identity), которая удаляет один уровень вложенности из любого Chain.
R.unnest([1, [2], [[3]]]); //=> [1, 2, [3]] R.unnest([[1, 2], [3, 4], [5, 6]]); //=> [1, 2, 3, 4, 5, 6]
until Добавлена в версии v0.20.0
(a → Boolean) → (a → a) → a → a
Параметры
-
predФункция-предикат
-
fnФункция-итератор
-
initНачальное значение
Возвращает
- * Итоговое значение, удовлетворяющее предикату
Принимает предикат, функцию преобразования и начальное значение, а возвращает значение того же типа, что и начальное. Для этого она применяет преобразование до тех пор, пока предикат не выполнится, после чего возвращает подходящее значение.
R.until(R.gt(R.__, 100), R.multiply(2))(1) // => 128
unwind Добавлена в версии v0.28.0
String → {k: [v]} → [{k: v}] Параметры
-
keyКлюч, определяющий, какое свойство объекта следует развернуть.
-
objectОбъект, содержащий список, который нужно развернуть в свойстве с именем, заданным ключом.
Возвращает
- List Список новых объектов, в каждом из которых указанному ключу соответствует элемент из развернутого списка.
Извлекает массив из входных документов и формирует для каждого его элемента отдельный документ. Каждый выходной документ представляет собой входной документ, в котором значение поля-массива заменено этим элементом.
R.unwind('hobbies', {
name: 'alice',
hobbies: ['Golf', 'Hacking'],
colors: ['red', 'green'],
});
// [
// { name: 'alice', hobbies: 'Golf', colors: ['red', 'green'] },
// { name: 'alice', hobbies: 'Hacking', colors: ['red', 'green'] }
// ] update Добавлена в версии v0.14.0
Number → a → [a] → [a]
Параметры
-
idxИндекс для обновления.
-
xЗначение, которое должно находиться по указанному индексу в возвращаемом массиве.
-
listИсходный объект, подобный массиву, который нужно обновить.
Возвращает
- Array Копию `list`, в которой значение по индексу `idx` заменено на `x`.
Возвращает новую копию массива, в которой элемент по указанному индексу заменён заданным значением.
Если idx < -list.length || idx >= list.length, возвращается исходный список.
См. также adjust.
R.update(1, '_', ['a', 'b', 'c']); //=> ['a', '_', 'c'] R.update(-1, '_', ['a', 'b', 'c']); //=> ['a', 'b', '_'] // out-of-range returns original list R.update(3, '_', ['a', 'b', 'c']); //=> ['a', 'b', 'c'] R.update(-4, '_', ['a', 'b', 'c']); //=> ['a', 'b', 'c']
useWith Добавлена в версии v0.1.0
((x1, x2, …) → z) → [(a → x1), (b → x2), …] → (a → b → … → z)
Параметры
-
fnФункция-обёртка.
-
transformersСписок функций-преобразователей
Возвращает
- function Функцию-обёртку.
Принимает функцию fn и список функций-преобразователей и возвращает новую функцию с каррированием. При вызове новая функция вызывает fn с параметрами, состоящими из результатов вызова каждого переданного обработчика с соответствующим аргументом новой функции.
Если новой функции передано больше аргументов, чем имеется функций-преобразователей, эти аргументы напрямую передаются в fn в качестве дополнительных параметров. Если вы ожидаете дополнительные аргументы, которые не нужно преобразовывать, то, хотя их можно игнорировать, лучше передать функцию тождественности, чтобы новая функция сообщала правильную арность.
См. также converge.
R.useWith(Math.pow, [R.identity, R.identity])(3, 4); //=> 81 R.useWith(Math.pow, [R.identity, R.identity])(3)(4); //=> 81 R.useWith(Math.pow, [R.dec, R.inc])(3, 4); //=> 32 R.useWith(Math.pow, [R.dec, R.inc])(3)(4); //=> 32
values Добавлена в версии v0.1.0
{k: v} → [v] Параметры
-
objОбъект, из которого нужно извлечь значения
Возвращает
- Array Массив значений собственных свойств объекта.
Возвращает список всех перечисляемых собственных свойств переданного объекта. Обратите внимание: порядок элементов выходного массива не гарантируется на разных платформах JS.
См. также valuesIn, keys, toPairs.
R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3] valuesIn Добавлена в версии v0.2.0
{k: v} → [v] Параметры
-
objОбъект, из которого нужно извлечь значения
Возвращает
- Array Массив значений собственных свойств объекта и свойств его прототипа.
Возвращает список всех свойств переданного объекта, включая свойства прототипа. Обратите внимание: порядок элементов выходного массива не гарантируется и может различаться на разных платформах JS.
const F = function() { this.x = 'X'; };
F.prototype.y = 'Y';
const f = new F();
R.valuesIn(f); //=> ['X', 'Y'] view Добавлена в версии v0.16.0
Lens s a → s → a
Lens s a = Functor f => (a → f a) → s → f sПараметры
-
lens -
x
Возвращает
- *
Возвращает «представление» заданной структуры данных, определяемое заданной линзой. Фокус линзы определяет, какая часть структуры данных видна.
См. также set, over, lens, lensIndex, lensProp, lensPath.
const xLens = R.lensProp('x');
R.view(xLens, {x: 1, y: 2}); //=> 1
R.view(xLens, {x: 4, y: 2}); //=> 4 when Добавлена в версии v0.18.0
(a → Boolean) → (a → b) → a → a | b
Параметры
-
predФункция-предикат
-
whenTrueFnФункция, вызываемая, если
conditionвозвращает истинное значение. -
xОбъект для проверки функцией
predи передачи вwhenTrueFnпри необходимости.
Возвращает
- * Либо `x`, либо результат применения `x` к `whenTrueFn`.
Проверяет последний аргумент, передавая его указанной функции-предикату. Если предикат выполняется, функция возвращает результат вызова функции whenTrueFn с тем же аргументом. Если предикат не выполняется, аргумент возвращается без изменений.
См. также ifElse, unless, cond.
// truncate :: String -> String
const truncate = R.when(
R.propSatisfies(R.gt(R.__, 10), 'length'),
R.pipe(R.take(10), R.append('…'), R.join(''))
);
truncate('12345'); //=> '12345'
truncate('0123456789ABC'); //=> '0123456789…' where Добавлена в версии v0.1.1
{String: (* → Boolean)} → {String: *} → Boolean Параметры
-
spec -
testObj
Возвращает
- Boolean
Принимает объект спецификации и тестовый объект; возвращает true, если тестовый объект удовлетворяет спецификации. Каждое собственное свойство спецификации должно быть функцией-предикатом. Каждый предикат применяется к значению соответствующего свойства тестового объекта. where возвращает true, если все предикаты возвращают true, и false в противном случае.
where отлично подходит для декларативного задания ограничений для других функций, таких как filter и find.
См. также propSatisfies, whereEq.
// pred :: Object -> Boolean
const pred = R.where({
a: R.equals('foo'),
b: R.complement(R.equals('bar')),
x: R.gt(R.__, 10),
y: R.lt(R.__, 20)
});
pred({a: 'foo', b: 'xxx', x: 11, y: 19}); //=> true
pred({a: 'xxx', b: 'xxx', x: 11, y: 19}); //=> false
pred({a: 'foo', b: 'bar', x: 11, y: 19}); //=> false
pred({a: 'foo', b: 'xxx', x: 10, y: 19}); //=> false
pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> false whereAny Добавлена в версии v0.28.0
{String: (* → Boolean)} → {String: *} → Boolean Параметры
-
spec -
testObj
Возвращает
- Boolean
Принимает объект спецификации и тестовый объект; каждое собственное свойство спецификации должно быть функцией-предикатом. Каждый предикат применяется к значению соответствующего свойства тестового объекта. whereAny возвращает true, если хотя бы один предикат возвращает true, и false в противном случае.
whereAny отлично подходит для декларативного задания ограничений для других функций, таких как filter и find.
См. также propSatisfies, where.
// pred :: Object -> Boolean
const pred = R.whereAny({
a: R.equals('foo'),
b: R.complement(R.equals('xxx')),
x: R.gt(R.__, 10),
y: R.lt(R.__, 20)
});
pred({a: 'foo', b: 'xxx', x: 8, y: 34}); //=> true
pred({a: 'xxx', b: 'xxx', x: 9, y: 21}); //=> false
pred({a: 'bar', b: 'xxx', x: 10, y: 20}); //=> false
pred({a: 'foo', b: 'bar', x: 10, y: 20}); //=> true
pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> true whereEq Добавлена в версии v0.14.0
{String: *} → {String: *} → Boolean Параметры
-
spec -
testObj
Возвращает
- Boolean
Принимает объект спецификации и тестовый объект; возвращает true, если тестовый объект удовлетворяет спецификации, и false в противном случае. Объект удовлетворяет спецификации, если для каждого собственного свойства спецификации обращение к этому свойству объекта возвращает то же значение (в терминах R.equals), что и обращение к этому свойству спецификации.
whereEq — специализированная версия where.
// pred :: Object -> Boolean
const pred = R.whereEq({a: 1, b: 2});
pred({a: 1}); //=> false
pred({a: 1, b: 2}); //=> true
pred({a: 1, b: 2, c: 3}); //=> true
pred({a: 1, b: 1}); //=> false without Добавлена в версии v0.19.0
[a] → [a] → [a]
Параметры
-
list1Значения, которые нужно удалить из
list2. -
list2Массив, из которого нужно удалить значения.
Возвращает
- Array Новый массив без значений из `list1`.
Возвращает новый список без значений из первого аргумента. Для определения равенства используется R.equals.
Работает как трансдьюсер, если на месте списка передан преобразователь.
См. также transduce, difference, remove.
R.without([1, 2], [1, 2, 1, 3, 4]); //=> [3, 4]
xor Добавлена в версии v0.27.1
a → b → Boolean
Параметры
-
a -
b
Возвращает
- Boolean true, если один из аргументов истинный, а другой ложный
Логическая операция исключающего ИЛИ. Возвращает true, если один из аргументов истинный, а другой ложный. В противном случае возвращает false.
R.xor(true, true); //=> false R.xor(true, false); //=> true R.xor(false, true); //=> true R.xor(false, false); //=> false
xprod Добавлена в версии v0.1.0
[a] → [b] → [[a,b]]
Параметры
-
asПервый список.
-
bsВторой список.
Возвращает
- Array Список, созданный путём объединения каждой возможной пары из `as` и `bs` в пары (`[a, b]`).
Создаёт новый список из двух переданных списков, формируя каждую возможную пару их элементов.
R.xprod([1, 2], ['a', 'b']); //=> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]
zip Добавлена в версии v0.1.0
[a] → [b] → [[a,b]]
Параметры
-
list1Первый массив.
-
list2Второй массив.
Возвращает
- Array Список, созданный путём объединения элементов `list1` и `list2`, имеющих одинаковые индексы.
Создаёт новый список из двух переданных списков, объединяя элементы, расположенные в них на одинаковых позициях. Возвращаемый список обрезается до длины более короткого из двух входных списков. Примечание: zip эквивалентна zipWith(function(a, b) { return [a, b] }).
R.zip([1, 2, 3], ['a', 'b', 'c']); //=> [[1, 'a'], [2, 'b'], [3, 'c']]
zipObj Добавлена в версии v0.3.0
[String] → [*] → {String: *} Параметры
-
keysМассив, элементы которого станут свойствами выходного объекта.
-
valuesСписок значений выходного объекта.
Возвращает
- Object Объект, созданный путём объединения элементов `keys` и `values`, имеющих одинаковые индексы.
Создаёт новый объект из списка ключей и списка значений. Сопоставление ключей и значений ограничивается длиной более короткого из двух списков. Примечание: zipObj эквивалентна pipe(zip, fromPairs).
R.zipObj(['a', 'b', 'c'], [1, 2, 3]); //=> {a: 1, b: 2, c: 3} zipWith Добавлена в версии v0.1.0
((a, b) → c) → [a] → [b] → [c]
Параметры
-
fnФункция, используемая для объединения двух элементов в одно значение.
-
list1Первый массив.
-
list2Второй массив.
Возвращает
- Array Список, созданный путём объединения элементов `list1` и `list2` с одинаковыми индексами с помощью `fn`.
Создаёт новый список из двух переданных списков, применяя функцию к каждой паре элементов, расположенных на одинаковых позициях. Возвращаемый список обрезается до длины более короткого из двух входных списков.
const f = (x, y) => {
// ...
};
R.zipWith(f, [1, 2, 3], ['a', 'b', 'c']);
//=> [f(1, 'a'), f(2, 'b'), f(3, 'c')]
© 2013–2025 Scott Sauyet and Michael Hurley
Licensed under the MIT License.
https://ramdajs.com/0.31.3/docs/