A, B, C, D, J, I, M, N, O, P, R, S, T, U, X, Z
- __
Function
- add
Math
- addIndex
Function
- adjust
List
- all
List
- allPass
Logic
- always
Function
- and
Logic
- any
List
- anyPass
List
- ap
Function
- aperture
List
- append
List
- apply
Function
- applySpec
Function
- ascend
Function
- assoc
Object
- assocPath
Object
- call
Function
- chain
List
- clamp
Relation
- clone
Object
- comparator
Function
- compose
Function
- composeK
Function
- composeP
Function
- concat
List
- cond
Logic
- construct
Function
- constructN
Function
- contains
List
- converge
Function
- countBy
Relation
- curry
Function
- curryN
Function
- dec
Math
- defaultTo
Logic
- descend
Function
- difference
Relation
- differenceWith
Relation
- dissoc
Object
- dissocPath
Object
- divide
Math
- drop
List
- dropLast
List
- dropLastWhile
List
- dropRepeats
List
- dropRepeatsWith
List
- dropWhile
List
- either
Logic
- empty
Function
- endsWith
List
- eqBy
Relation
- eqProps
Object
- equals
Relation
- evolve
Object
- F
Function
- filter
List
- find
List
- findIndex
List
- findLast
List
- findLastIndex
List
- flatten
List
- flip
Function
- forEach
List
- forEachObjIndexed
Object
- fromPairs
List
- juxt ``
- map
List
_Добавлено в версии 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)
var greet = R.replace('{name}', R.__, 'Hello, {name}!');
greet('Alice'); //=> 'Hello, Alice!'
Попробуйте в REPL
Number → Number → Number
a |
b |
вернет Number |
Добавлено в версии v0.1.0
Добавляет два значения
Смотрите также subtract.
R.add(2, 3); //=> 5
R.add(7)(10); //=> 17
Попробуйте в REPL
((a … → b) … → [a] → *) → (a …, Int, [a] → b) … → [a] → *)
fn | Функция итерации списка, которая не передает индекс или список в функцию обратного вызова(callback) |
вернет function | Изменена функция итерации списка, которая не передает (элемент, индекс, список) в его функцию обратного вызова(callback) |
Добавлено в версии v0.15.0
Создает новую функцию итерации списка с уже существующей, с помощью добавления двух новых аргументов к функции обратного вызова: текущий индекс и весь список.
Это, в свою очередь, преобразует, например функцию R.map
в функцию, которая больше напоминает Array.prototype.map
. Обратите внимание на то, что это сработает только для функций, в которых итерирующая функция обратного вызова является первым аргументом, а список - последним. (Последнее может быть не важно, если аргумент списка не используется.)
var 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']
Попробуйте в REPL
(a → a) → Number → [a] → [a]
fn | Функция которая будет применена |
idx | Индекс |
list | Массиво-подобный объект, чье значение будет заменено в указанном индексом месте. |
вернет Array | Копию передаваемого массиво-подобного объекта, с элементом (на месте согласно индексу idx ) замененным значением которое вернулось после применения функции ' fn ' к существующему элементу. |
Добавлено в версии v0.14.0
Применяет функцию к указанному индексом элемента в массиве, возвращая новую копию массива с элементом, на указанном индксом месте, замененным результатом примененной функции.
Смотрите также update.
R.adjust(R.add(10), 1, [1, 2, 3]); //=> [1, 12, 3]
R.adjust(R.add(10))(1)([1, 2, 3]); //=> [1, 12, 3]
Попробуйте в REPL
(a → Boolean) → [a] → Boolean
fn | Функция предикат |
list | Массив, который должен быть оценен. |
вернет Boolean | true , если предикат удовлетворен каждым из элементов, в противном случае вернется false . |
Добавлено в версии v0.1.0
Вернет true
, если все элементы списка соответствуют предикату, false
, если в списке нет ни одного который бы отвечал.
Применяет ко всем метод второго аргумента, если он присутствует.
Действует как преобразователь (трансдюсер), если трансформер указан на месте списка.
Смотрите также any, none, transduce.
var equals3 = R.equals(3);
R.all(equals3)([3, 3, 3, 3]); //=> true
R.all(equals3)([3, 3, 1, 3]); //=> false
Попробуйте в REPL
[(*… → Boolean)] → (*… → Boolean)
predicates | массив предикатов, которые необходимо проверить |
вернет: function | объединенный предикат |
Добавлено в версии v0.9.0
Принимает список предикатов и вернет предикат, который вернет true
для заданного списка аргументов, если каждый из переданных предикатов удовлетворен теми аргументами.
Возвращенная функция является каррированной, чья арность совпадает с арностью предиката с высочайшей арностью.
Смотрите также anyPass
var isQueen = R.propEq('rank', 'Q');
var isSpade = R.propEq('suit', '♠︎');
var isQueenOfSpades = R.allPass([isQueen, isSpade]);
isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false
isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true
Попробуйте в REPL
a → (* → a)
val | Значение, которое необходимо обернуть в функцию |
вернет function | функция :: * -> val. |
Добавлено в версии v0.1.0
Возвращает функцию, которая всегда возвращает заданное значение. Обратите внимание, что для непримитивов возвращаемое значение является ссылкой на исходное значение.
Эта функция известна как const
, constant
или K
(для K combinator) в других языках и библиотеках.
var t = R.always('Tee');
t(); //=> 'Tee'
Попробуйте в REPL
a → b → a | b
a | |
b | |
вернет Any | первый аргумент, если он имеет значение false , в противном случае второй аргумент. |
Добавлено в версии v0.1.0
Возвращает true
, если оба аргумента истинны, в противном случае - false
.
Смотрите также both.
R.and(true, true); //=> true
R.and(true, false); //=> false
R.and(false, true); //=> false
R.and(false, false); //=> false
Попробуйте в REPL
(a → Boolean) → [a] → Boolean
fn | Функция предикат |
list | Массив который должен быть оценен. |
вернет Boolean | true , если предикат удовлетворен хотя бы одним элементом, false в противном случае. |
Добавлено в версии v0.1.0
Возвращает true
, если хотя бы один из элементов списка соответствует предикату, иначе false
.
Применяется к любому методу второго аргумента, если он присутствует.
Действует как преобразователь (трансдюсер), если трансформер указан на месте списка.
Смотрите также all, none, transduce.
var lessThan0 = R.flip(R.lt)(0);
var lessThan2 = R.flip(R.lt)(2);
R.any(lessThan0)([1, 2]); //=> false
R.any(lessThan2)([1, 2]); //=> true
Попробуйте в REPL
[(*… → Boolean)] → (*… → Boolean)
predicates | массив предикатов, которые необходимо проверить |
вернет function | объединенный предикат |
Добавлено в версии v0.9.0
Принимает список предикатов и вернет предикат, который вернет true
для заданного списка аргументов, если хотя бы один из переданных предикатов удовлетворен теми аргументами.
Возвращенная Функция является каррированной, чья арность совпадает с арностью предиката с высочайшей арностью.
Смотрите также allPass
var isClub = R.propEq('suit', '♣');
var isSpade = R.propEq('suit', '♠');
var isBlackCard = R.anyPass([isClub, isSpade]);
isBlackCard({rank: '10', suit: '♣'}); //=> true
isBlackCard({rank: 'Q', suit: '♠'}); //=> true
isBlackCard({rank: 'Q', suit: '♦'}); //=> false
Попробуйте в REPL
[a → b] → [a] → [b]
Apply f => f (a → b) → f a → f b
applyF |
applyX |
вернет * |
Добавлено в версии v0.3.0
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"]
Попробуйте в REPL
Number → [a] → [[a]]
n | Какого размера должны быть созданы массивы. |
list | Список, который нужно разбить на массивы с n -длиной. |
вернет Array | Финальный список массивов, каждый с длиной n . |
Добавлено в версии v0.12.0
вернет новый список, составленный из массивов, каждый с длиной n
последовательных элементов. Если n
больше чем длина списка-вернется пустой список.
Действует как преобразователь(transducer), если трансформер(transformer) передан на месте списка.
Смотрите также 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]); //=> []
Попробуйте в REPL
a → [a] → [a]
el | Элемент, который нужно добавить в конц списка. |
list | Список элементов к которому следует добавить элемент. |
вернет Array | Новый массив, включающий в себя элементы старого списка и в конце добавлен элемент el . |
Добавлено в версии v0.1.0
вернет новый список, в котором находятся элементы переданные в качестве параметра list
, и в конце элемент переданный в качестве аргумента el
.
Смотрите также prepend.
R.append('tests', ['write', 'more']); //=> ['write', 'more', 'tests']
R.append('tests', []); //=> ['tests']
R.append(['tests'], ['write', 'more']); //=> ['write', 'more', ['tests']]
Попробуйте в REPL
(*… → a) → [*] → a
fn | Функция, которая будет вызвана с аргументами args |
args | Аргументы, с которыми должна быть вызвана Функция fn . |
вернет * результат | Результат, равный fn(...args) |
Добавлено в версии v0.7.0
Применяет функцию fn
к списку аргументов args
. Это полезно для создания функций фиксированной арности из функции с переменным числом аргументов. fn
должна быть привязанной (bind) функцией, в случае если контекст важен.
var nums = [1, 2, 3, -99, 42, 6, 7];
R.apply(Math.max, nums); //=> 42
Попробуйте в REPL
{k: ((a, b, …, m) → v)} → ((a, b, …, m) → {k: v})
spec | Объект рекурсивно сопоставляет свойства с аргументами функции для получения значений этих свойств. |
вернет function | Функция, которая вернет объект с такой же структурой как и объект spec , с каждым свойством установленным в значение, которое было возвращено вызовом связанной функции с передаваемыми аргументами. |
Добавлено в версии v0.20.0 |
Учитывая, что объект spec
рекурсивно сопоставляет свойства функции, создается Функция, которая создает объект с такой же структурой, путем сопоставления каждого свойства с результатом вызова связанной с ним функции с передаваемыми аргументами.
Смотрите также converge, juxt.
var getMetrics = R.applySpec({
sum: R.add,
nested: { mul: R.multiply }
});
getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } }
Попробуйте в REPL
Ord b => (a → b) → a → a → Number
fn | Функция арностью один, которая вернет значение, которое можно сравнить. |
a | Первый элемент для сравнения. |
b | Второй элемент для сравнения. |
вернет Number | -1 если fn(a) < fn(b) , 1 - если fn(b) < fn(a) , иначе 0 |
Добавлено в версии v0.23.0
Создает восходящую функцию сравнения, которая вернет значение которое может быть сравнимо с помощью <
и >
.
Смотрите также descend.
var byAge = R.ascend(R.prop('age'));
var people = [
// ...
];
var peopleByYoungestFirst = R.sort(byAge, people);
Попробуйте в REPL
String → a → {k: v} → {k: v}
prop | Имя свойства, которое должно быть задано. |
val | Новое значение |
obj | Объект который должен быть скопирован. |
вернет Object | новый объект, эквивалентный исходному, за исключением измененного свойства. |
Добавлено в версии v0.8.0
Создает поверхностную копию объекта, устанавливая или переопределяя указанное свойство заданным значением. Обратите внимание, что это создаст новый объект. Все свойства, не являющиеся примитивами, копируются по ссылке. Смотрите также dissoc.
R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3}
Попробуйте в REPL
[Idx] → a → {a} → {a}
Idx = String | Int
path | путь который надо задать. |
val | Новое значение |
obj | Объект который должен быть скопирован. |
вернет Object | Новый объект, эквивалентный оригинальному, за исключением указанного пути. |
Добавлено в версии v0.8.0
Создает поверхностную копию объекта, устанавливая или перезаписывая узлы, которые необходимы для создания указанного пути и вставляя указанное значение в конце того пути. Обратите внимание, что он так же копирует и приравнивает значения прототипов к новому объекту. Все значения не являющиеся примитивами копируются по ссылке. Смотрите также dissocPath.
R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}}
// Любые отсутствующие или не объектные ключи в path будут переопределены
R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}}
Попробуйте в REPL
(* → c) → (a, b → c)
fn | Функция, которую необходимо обернуть. |
вернет function | Новая Функция, которая оборачивает функцию fn . Новая Функция гарантированно имеет арность 2. |
Добавлено в версии v0.2.0
Оборачивает функцию любой арности (включая нулевую) в функцию, которая принимает в себя 2 аргумента. Ни один из избыточных аргументов не будет передан в обернутую функцию.
var takesThreeArgs = function(a, b, c) {
return [a, b, c];
};
takesThreeArgs.length; //=> 3
takesThreeArgs(1, 2, 3); //=> [1, 2, 3]
var takesTwoArgs = R.binary(takesThreeArgs);
takesTwoArgs.length; //=> 2
// В обернутую функцию передается только 2 аргумента
takesTwoArgs(1, 2, 3); //=> [1, 2, undefined]
Попробуйте в [REPL](http://ramdajs.com/repl/?v=0.24.1#;var takesThreeArgs %3D function(a%2C b%2C c) {%0A return [a%2C b%2C c]%3B%0A}%3B%0AtakesThreeArgs.length%3B %2F%2F%3D> 3%0AtakesThreeArgs(1%2C 2%2C 3)%3B %2F%2F%3D> [1%2C 2%2C 3]%0A%0Avar takesTwoArgs %3D R.binary(takesThreeArgs)%3B%0AtakesTwoArgs.length%3B %2F%2F%3D> 2%0A%2F%2F Only 2 arguments are passed to the wrapped function%0AtakesTwoArgs(1%2C 2%2C 3)%3B %2F%2F%3D> [1%2C 2%2C undefined])
(* → *) → {*} → (* → *)
fn | Функция, которую необходимо привязать к контексту. |
thisObj | Контекст, к которому привязывается Функция fn |
вернет function | Функция, которая будет выполнена в контексте thisObj . |
Добавлено в версии v0.6.0
Создает функцию привязанную к контесту. Примечание: R.bind
не предоставляет дополнительные возможности привязки аргументов Function.prototype.bind
.
Смотрите также partial.
var 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}
Попробуйте в REPL
(*… → Boolean) → (*… → Boolean) → (*… → Boolean)
f | Предикат |
g | Другой предикат |
вернет function | Функция, вызывает f и g и возвращает && их результатов. |
Добавлено в версии v0.12.0
Функция, которая вызывает две передаваемых в нее функции и возвращает &&
результата. Это вернет результат первой функции, если она false
, а иначе вернет вторую функцию. Примечание, вторая Функция не будет вызвана, если первая вернет значение false
.
В дополнение к функциям, R.both
также принимает любые совместимые с fantasy-land
аппликативные функторы.
Смотрите также and.
var gt10 = R.gt(R.__, 10)
var lt20 = R.lt(R.__, 20)
var f = R.both(gt10, lt20);
f(15); //=> true
f(30); //=> false
Попробуйте в REPL
(*… → a),*… → a
fn | Функция, которую нужно применить к оставшимся аргументам. |
args | Любое количество позиционных аргументов. |
вернет * |
Добавлено в версии v0.9.0
вернет результат вызова первого аргумента и оставшиеся аргументы. Иногда это полезно в качестве конверсионной функции для R.converge
: первая ветка может образовать функцию, в то время как остальные ветви образуют значения, которые будут переданы в ту образованную функцию в качестве аргументов.
Смотрите также apply.
R.call(R.add, 1, 2); //=> 3
var indentN = R.pipe(R.times(R.always(' ')),
R.join(''),
R.replace(/^(?!$)/gm));
var 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'
Попробуйте в REPL
Chain m => (a → m b) → m a → m b
fn | Функция, с которой надо совместить. |
list | Список для отображения. |
вернет Array | Результат плоского отображения списка list с функцией fn . |
Добавлено в версии v0.3.0
chain
применяет функцию к списку и объединяет результаты. chain
также известен в некоторых библиотеках как flatMap
.
Выполняется метод chain
второго аргумента(если он имеется), согласно FantasyLand Chain спецификации.
Смотрите также apply.
var 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]
Попробуйте в REPL
Ord a => a → a → a → a
minimum | Нижний предел диапазона (включительно) |
maximum | Верхний предел диапазона (включительно) |
value | Значение для закрепления в диапазоне |
вернет Number | вернет minimum , когда значение меньше минимума(value < minimum ), maximum , когда значение больше максимум(value > maximum ), во всех других случаях вернет именно значение(value ) |
Добавлено в версии v0.20.0
Ограничивает число вне диапазона.
Также работает для других упорядоченных типов, таких как сроки (Strings) и даты (Dates)
R.clamp(1, 10, -5) // => 1
R.clamp(1, 10, 15) // => 10
R.clamp(1, 10, 4) // => 4
Попробуйте в REPL
{*} → {*}
value | Объект или массив, который нужно клонировать |
вернет * | Глубокую копию передаваемого объекта / массива (val ) |
Добавлено в версии v0.1.0
Создает глубокую копию value
, которое может содержать (вложенный) массивы (Array
), объекты (Object
), числа (Number
), строки (String
), булевые значения (Boolean
) и даты (Date
). Функции назначаются по ссылке, а не копируются.
Передает в метод clone
, если тот присутствует.
var objects = [{}, {}, {}];
var objectsClone = R.clone(objects);
objects === objectsClone; //=> false
objects[0] === objectsClone[0]; //=> false
Попробуйте в REPL
((a, b) → Boolean) → ((a, b) → Number)
pred | Функция предикат второго уровня, которая возвращает true, если первый аргумент меньше второго, иначе false |
вернет Function | Функция:: a - > b - > Int , которая возвращает -1 Если a < b , 1 Если b < a , в противном случае 0 |
Добавлено в версии v0.1.0
Создает функцию сравнения, которая сообщает, является ли первый элемент меньше второго.
var byAge = R.comparator((a, b) => a.age < b.age);
var people = [
// ...
];
var peopleByIncreasingAge = R.sort(byAge, people);
Попробуйте в REPL
(*… → *) → (*… → Boolean)
f |
вернет Function |
Добавлено в версии v0.12.0
Принимает функцию f
и возвращает функцию g
такую, что если она вызывается с теми же аргументами что и f
, когда f
возвращает true
, g
возвращает false
, а когда f
возвращает значение false
, g
возвращает true
.
R.complement может быть применено к любому функтору.
Смотрите также not.
var isNotNil = R.complement(R.isNil);
isNil(null); //=> true
isNotNil(null); //=> false
isNil(7); //=> false
isNotNil(7); //=> true
Попробуйте в REPL
((y → z), (x → y), …, (o → p), ((a, b, …, n) → o)) → ((a, b, …, n) → z)
...functions | Функции, которые должны быть скомпозированны. |
вернет function | Скомпозированную функцию |
Добавлено в версии v0.1.0
Выполняет композирование функции справа налево. Крайняя правая Функция может иметь любую арность, а другие функции должны быть унарными.
Зауважте: Результат метода compose
не каррируется автоматически.
Смотрите также pipe.
var classyGreeting = (firstName, lastName) => "The name's " + lastName + ", " + firstName + " " + lastName
var 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
Попробуйте в REPL
Chain m => ((y → m z), (x → m y), …, (a → m b)) → (a → m z)
...functions | Функции, которые должны быть скомпозированны. |
вернет function |
Добавлено в версии v0.16.0
Возвращает композицию Kleisli справа налево предоставленных функций, каждая из которых должна возвращать значение типа, поддерживаемого Chain
.
R.composeK(h, g, f) эквивалент R.compose(R.chain(h), R.chain(g), f).
Смотрите также pipeK.
// get :: String -> Object -> Maybe *
var get = R.curry((propName, obj) => Maybe(obj[propName]))
// getStateCode :: Maybe String -> Maybe String
var getStateCode = R.composeK(
R.compose(Maybe.of, R.toUpper),
get('state'),
get('address'),
get('user'),
);
getStateCode({"user":{"address":{"state":"ny"}}}); //=> Maybe.Just("NY")
getStateCode({}); //=> Maybe.Nothing()
Попробуйте в REPL
((y → Promise z), (x → Promise y), …, (a → Promise b)) → (a → Promise z)
...functions | Функции, которые должны быть скомпозированны. |
вернет function |
Добавлено в версии v0.10.0
Выполняет композицию справа налево одной или нескольких функций, возвращающих Promise
. Крайняя правая функция может иметь любую арность, остальные функции должны быть унарными.
Смотрите также pipeP.
var db = {
users: {
JOE: {
name: 'Joe',
followers: ['STEVE', 'SUZY']
}
}
}
// We'll pretend to do a db lookup which returns a promise
var lookupUser = (userId) => Promise.resolve(db.users[userId])
var lookupFollowers = (user) => Promise.resolve(user.followers)
lookupUser('JOE').then(lookupFollowers)
// followersForUser :: String -> Promise [UserId]
var followersForUser = R.composeP(lookupFollowers, lookupUser);
followersForUser('JOE').then(followers => console.log('Followers:', followers))
// Followers: ["STEVE","SUZY"]
Попробуйте в REPL
[a] → [a] → [a]
String → String → String
firstList | Первый список. |
secondList | Второй список. |
вернет Array | Список, состоящий из элементов firstList и элементов secondList . |
Добавлено в версии v0.1.0
Возвращает результат конкатенации данных списков или строк.
Примечание: R.concat ожидает, что оба аргумента будут одного типа, в отличие от метода Array.prototype.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([], []); //=> []
Попробуйте в REPL
[[(*… → Boolean),(*… → *)]] → (*… → *)
pairs | Список [предикат, трансформатор] |
вернет Function |
Добавлено в версии v0.6.0
Возвращает функцию fn, которая инкапсулирует if/else
, if/else
, ... logic
. R.cond принимает список пар [предикат, трансформатор]. Все аргументы fn
применяются к каждому из предикатов по очереди, пока не вернется «истинное» значение, после чего fn
возвращает результат применения своих аргументов к соответствующему трансформатору. Если ни один из предикатов не совпадает, fn
возвращает undefined
.
Отправляет метод concat
первого аргумента, если он присутствует. Может также объединять два члена полугруппы совместимой с fantasy-land.
var 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'
Попробуйте в REPL
(* → {*}) → (* → {*})
fn | Функция конструктор для обертывания. |
вернет Function | Каррированная функция конструктор. |
Добавлено в версии v0.1.0
Оборачивает функцию-конструктор внутри каррированной функции, которая может быть вызвана с теми же аргументами и возвращает один и тот же тип.
Смотрите также invoker.
// Constructor function
function Animal(kind) {
this.kind = kind;
};
Animal.prototype.sighting = function() {
return "It's a " + this.kind + "!";
}
var AnimalConstructor = R.construct(Animal)
// Notice we no longer need the 'new' keyword:
AnimalConstructor('Pig'); //=> {"kind": "Pig", "sighting": function (){...}};
var animalTypes = ["Lion", "Tiger", "Bear"];
var animalSighting = R.invoker(0, 'sighting');
var sightNewAnimal = R.compose(animalSighting, AnimalConstructor);
R.map(sightNewAnimal, animalTypes); //=> ["It's a Lion!", "It's a Tiger!", "It's a Bear!"]
Попробуйте в REPL
Number → (* → {*}) → (* → {*})
n | Арность функции-конструктора. |
fn | Функция конструктор для обертывания. |
вернет Function | Каррированная функция конструктор. |
Добавлено в версии v0.4.0
Оборачивает функцию-конструктор внутри каррированной функции, которая может быть вызвана с теми же аргументами и возвращает один и тот же тип. Арность функции возвращается, чтобы разрешить использование функций с переменным числом аргументов конструктора.
Смотрите также invoker.
// Функция конструктор с переменным числом аргументов
function Salad() {
this.ingredients = arguments;
}
Salad.prototype.recipe = function() {
var instructions = R.map(ingredient => 'Add a dollop of ' + ingredient, this.ingredients);
return R.join('\n', instructions);
};
var ThreeLayerSalad = R.constructN(3, Salad);
// Обратите внимание, что нам больше не нужно ключевое слово "new", и конструктор каррирован для 3 аргументов.
var 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
Попробуйте в REPL
a → [a] → Boolean
a | Элемент для сравнения. |
list | Массив для рассмотрения. |
вернет Boolean | true , если эквивалентный элемент находится в списке, в противном случае - false . |
Добавлено в версии v0.1.0
Возвращает true
, если указанное значение равно, с точки зрения R.equals, по меньшей мере одному элементу данного списка, false
в противном случае.
Смотрите также any.
R.contains(3, [1, 2, 3]); //=> true
R.contains(4, [1, 2, 3]); //=> false
R.contains({ name: 'Fred' }, [{ name: 'Fred' }]); //=> true
R.contains([42], [[42]]); //=> true
Попробуйте в REPL
(x1 → x2 → … → z) → [(a → b → … → x1), (a → b → … → x2), …] → (a → b → … → z)
after | Функция after будет вызвона с возвращаемыми значениями fn1 и fn2 в качестве аргументов. |
functions | Список функций. |
вернет function | Новая функция. |
Добавлено в версии v0.4.2
Принимает функцию преобразователь и список функций и вернет новую функцию. При вызове эта новая Функция применяется к некоторым аргументам, каждая переданная Функция применяется к соответствующим аргументам. Результат каждой примененной функции передается как аргумент функции преобразователя для создания возвращаемого значение.
Смотрите также useWith.
var average = R.converge(R.divide, [R.sum, R.length])
average([1, 2, 3, 4, 5, 6, 7]) //=> 4
var strangeConcat = R.converge(R.concat, [R.toUpper, R.toLower])
strangeConcat("Yodel") //=> "YODELyodel"
Попробуйте в REPL
(a → String) → [a] → {*}
fn | Функция, используемая для сопоставления ключ - значение. |
list | Список для подсчета элементов. |
вернет Object | Сопоставление ключей объекта с числом, вхождений в список. (An object mapping keys to number, of occurrences in the list.) |
Добавлено в версии v0.1.0
Подсчитывает элементы списка в зависимости от того, сколько из них соответствует каждому значению ключа, сгенерированного предоставленной функцией. Возвращает объект, сопоставляющий ключи, созданные fn
, с количеством вхождений в списке. Обратите внимание, что все ключи принудительно приведены к строкам из-за того, как работают объекты JavaScript.
Действует как преобразователь, если трансформатор задан в позиции списка.
var numbers = [1.0, 1.1, 1.2, 2.0, 3.0, 2.2];
R.countBy(Math.floor)(numbers); //=> {'1': 3, '2': 2, '3': 1}
var letters = ['a', 'b', 'A', 'a', 'B', 'c'];
R.countBy(R.toLower)(letters); //=> {'a': 3, 'b': 2, 'c': 1}
Попробуйте в REPL
(* → a) → (* → a)
fn | Функция, которую ужно закаррировать. |
вернет Function | Новая каррированная функция |
Добавлено в версии v0.1.0
Возвращает эквивалент предоставленной функции. Функция карри имеет две необычные возможности.
Во-первых, его аргументы не обязательно должны предоставляться по одному. Если f
- тернарная функция, а g
- R.curry(f)
, то следующие функции эквивалентны:
- g(1)(2)(3)
- g(1)(2, 3)
- g(1, 2)(3)
- g(1, 2, 3)
Во-вторых, специальное значение placeholder 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)
Смотрите также curryN.
var addFourNumbers = (a, b, c, d) => a + b + c + d;
var curriedAddFourNumbers = R.curry(addFourNumbers);
var f = curriedAddFourNumbers(1, 2);
var g = f(3);
g(4); //=> 10
Попробуйте в REPL
Number → (* → a) → (* → a)
length | Арность возвращаемой функции |
fn | Функция, которую ужно закаррировать. |
вернет Function | Новая каррированная функция |
Добавлено в версии v0.5.0
Возвращает эквивалент предоставленной функции, с заданной арностью. Функция карри имеет две необычные возможности.
Во-первых, его аргументы не обязательно должны предоставляться по одному. Если g
является R.curryN(3, f)
, то следующие эквиваленты:
- g(1)(2)(3)
- g(1)(2, 3)
- g(1, 2)(3)
- g(1, 2, 3)
Во-вторых, специальное значение placeholder 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.
var sumArgs = (...args) => R.sum(args);
var curriedAddFourNumbers = R.curryN(4, sumArgs);
var f = curriedAddFourNumbers(1, 2);
var g = f(3);
g(4); //=> 10
Попробуйте в REPL
Number → Number
n |
вернет Number n - 1 |
Добавлено в версии v0.9.0
Уменьшит свой аргумент.
Смотрите также inc.
R.dec(42); //=> 41
Попробуйте в REPL
a → b → a | b
default | Значение по умолчанию |
val | val будет возвращен вместо значения по умолчанию, пока val не является null , undefined или NaN |
вернет * | Второе значение, если оно не является null , undefined или NaN , иначе вернет значение по умолчанию |
Добавлено в версии v0.10.0
вернет второй аргумент если он не null
, undefined
или NaN
, иначе вернет default
.
var defaultTo42 = R.defaultTo(42);
defaultTo42(null); //=> 42
defaultTo42(undefined); //=> 42
defaultTo42('Ramda'); //=> 'Ramda'
// parseInt('string') results in NaN
defaultTo42(parseInt('string')); //=> 42
Попробуйте в REPL
Ord b => (a → b) → a → a → Number
fn | Унарная функция, возвращающая значение, которое можно сравнить |
a | Первый элемент для сравнения. |
b | Второй элемент для сравнения. |
вернет Number | -1 в случае, если fn(a) > fn(b) , или 1 , если fn(b) > fn(a) , иначе вернет 0 |
Добавлено в версии v0.23.0
Создает нисходящий компаратор из функции, которая возвращает значение, которое можно сравнить с <
и >
.
Смотрите также ascend.
var byAge = R.descend(R.prop('age'));
var people = [
// ...
];
var peopleByOldestFirst = R.sort(byAge, people);
Попробуйте в REPL
[*] → [*] → [*]
list1 | Первый список. |
list2 | Второй список. |
вернет Array | вернет массив элементов из списка list1 , которых нет в списке list2 . |
Добавлено в версии v0.1.0
Находит набор (неповторяющихся) элементов из первого списка, которых нет во втором списке. Объекты и массивы сравниваются с точки зрения равенства значений, а не равенства ссылок.
Смотрите также 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}]
Попробуйте в REPL
((a, a) → Boolean) → [a] → [a] → [a]
pred | Предикат, который используется для выяснения равны ли елементы между собой. |
list1 | Первый список. |
list2 | Второй список. |
вернет Array | вернет массив элементов из списка list1 , которых нет в списке list2 . |
Добавлено в версии v0.1.0
Находит набор (неповторяющихся) элементов первого списка, которых нет во втором списке. Повторяемость элементов оказывается согласно значению, которое вернетться после применения предоставленного предиката по обоим спискам.
Смотрите также difference, symmetricDifference, symmetricDifferenceWith.
var cmp = (x, y) => x.a === y.a;
var l1 = [{a: 1}, {a: 2}, {a: 3}];
var l2 = [{a: 3}, {a: 4}];
R.differenceWith(cmp, l1, l2); //=> [{a: 1}, {a: 2}]
Попробуйте в REPL
String → {k: v} → {k: v}
prop | Имя свойства, которое нужно диссоциировать (отделить) |
obj | Объект, который нужно клонировать |
вернет Object | Новый объект, эквивалентный obj , но без указанного свойства prop . |
Добавлено в версии v0.10.0
вернет объект, не содержащий указанного свойства prop
.
Смотрите также assoc.
R.dissoc('b', {a: 1, b: 2, c: 3}); //=> {a: 1, c: 3}
Попробуйте в REPL
[Idx] → {k: v} → {k: v}
Idx = String | Int
path | Путь до значения, которое надо пропустить |
obj | Объект, который нужно копировать |
вернет Object | Новый объект без свойства, которое находится по указанному пути. |
Добавлено в версии v0.11.0
Создает поверхностную копию объекта, пропуская свойство по указанному пути. Примечание: это также копирует и приравнивает свойства прототипа к новому объекту. Все непримитивы копируются по ссылке.
Смотрите также assocPath.
R.dissocPath(['a', 'b', 'c'], {a: {b: {c: 42}}}); //=> {a: {b: {}}}
Попробуйте в REPL
Number → Number → Number
a | Первое значение. |
b | Первое значение. |
вернет Number | Результат a / b . |
Добавлено в версии v0.1.0
Делит два числа, эквивалент a / b
.
Смотрите также multiply.
R.divide(71, 100); //=> 0.71
var half = R.divide(R.__, 2);
half(42); //=> 21
var reciprocal = R.divide(1);
reciprocal(4); //=> 0.25
Попробуйте в REPL
Number → [a] → [a]
Number → String → String
n | |
list | |
вернет * | Копию списка без первых n 'ktvtynjd. |
Добавлено в версии v0.1.0
вернет все, кроме первых 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'
Попробуйте в REPL
Number → [a] → [a]
Number → String → String
n | Количество элементов списка, которое нужно пропустить. |
list | Список элементов. |
вернет Array | Копия списка только c первыми list.length - n элементами. |
Добавлено в версии v0.16.0
вернет список, который содержит все кроме последних 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'
Попробуйте в REPL
(a → Boolean) → [a] → [a]
(a → Boolean) → String → String
predicate | Функция, которая должна быть вызвана для каждого элемента. |
xs | Коллекция, которую надо итерировать. |
вернет Array | Новый массив без элементов, которые начиная с конца возвращают falsy значение из функции-предиката(predicate ). |
Добавлено в версии v0.16.0
Вернет новый список, без последних элементов переданного списка, которые удовлетворяют условию переданной функции-предиката. Она передает каждое значение справа к переданному предикату, отсеивая элементы пока Функция-предикат возвращает false
. Функция-предикат применяется к одному аргементу: (value).
Смотрите также takeLastWhile, addIndex, drop, dropWhile.
var 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'
Попробуйте в REPL
[a] → [a]
list | Рассматриваемый массив. |
вернет Array | list без повторяющихся элементов. |
Добавлено в версии v0.14.0
вернет новый список без последовательно повторяющихся элементов. Для определения равенства используется R.equals
.
Ведет себя как трансдюсер, если передан трансформер вместо списка.
Смотрите также transduce.
R.dropRepeats([1, 1, 1, 2, 3, 4, 4, 2, 2]); //=> [1, 2, 3, 4, 2]
Попробуйте в REPL
((a, a) → Boolean) → [a] → [a]
pred | Предикат, с помощью которого проверяется, есть ли два элемента равные между собой |
list | Рассматриваемый массив. |
вернет Array | list без повторяющихся элементов. |
_Добавлено в версии v0.14.0
вернет новый список без последовательно повторяющихся элементов. Равенство определяется применением переданного предиката к каждой паре последовательных элементов. Первый элемент в серии равных элементов будет сохранен.
Ведет себя как трансдюсер, в случае, если вместо списка передан трансформер.
Смотрите также transduce.
var l = [1, -1, 1, 3, 4, -4, -4, -5, 5, 3, 3];
R.dropRepeatsWith(R.eqBy(Math.abs), l); //=> [1, 3, 4, -5, 3]
Попробуйте в REPL
(a → Boolean) → [a] → [a]
(a → Boolean) → String → String
fn | Фунция, которая будет вызываться на каждой итерации. |
xs | Итерируемая коллекция. |
вернет Array | Новый массивю |
Добавлено в версии v0.9.0
Вернет новый список, исключая начальные элементы переданного списка, которые удовлетворяют условию переданного предиката. Эта Функция передает каждое значение из списка в предоставленный предикат, пропуская элементы, пока предикат возвращает true
. Предикат применяется к одному элементу: (value)
.
Передает в dropWhile
метод второго аргумента, если тот присутствует.
Ведет себя как трансдюсер, если вместо списка передан трансформер.
Смотрите также takeWhile, transduce, addIndex.
var 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'
Попробуйте в REPL
(*… → Boolean) → (*… → Boolean) → (*… → Boolean)
f | предикат |
d | второй предикат |
вернет Function | Функция которая применит логическое или к передаваемым аргументам |
Добавлено в версии v0.24.0
Фунция обертка, вызывает функции и применяет к ним логическое или
, возвращая результат первой если это истинна true
или результат второй в противном случае. Примечание: вторая функция не будет вызвана если первая вернет true
.
Помимо функций, R.either
также принимает апликативные функторы совместимые с fantasy-land
.
Смотрите также or
var gt10 = x => x > 10;
var even = x => x % 2 === 0;
var f = R.either(gt10, even);
f(101); //=> true
f(8); //=> true
Попробуйте в REPL
a → a
x |
вернет * |
Добавлено в версии v0.3.0
Вернет пустое значение типа аргумента. Ramda определяет пустое значение Array ([])
, Object ({})
, String ("")
и 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}); //=> {}
Попробуйте в REPL
[a] → Boolean
String → Boolean
suffix |
list |
вернет Boolean |
Добавлено в версии v0.24.0
Проверит заканчивается ли список list
, предоставленными значениями.
R.endsWith('c', 'abc') //=> true
R.endsWith('b', 'abc') //=> false
R.endsWith(['c'], ['a', 'b', 'c']) //=> true
R.endsWith(['b'], ['a', 'b', 'c']) //=> false
Попробуйте в REPL
(a → b) → a → a → Boolean
f |
x |
y |
вернет Boolean |
Добавлено в версии v0.18.0
Принимает функцию и два значения и возвращает true
, если фукция вернет одно и то же для каждого значения в противном случае false
.
R.eqBy(Math.abs, 5, -5); //=> true
Попробуйте в REPL
k → {k: v} → {k: v} → Boolean
props | Имя свойства для сравнения |
obj1 | |
obj2 | |
вернет Boolean |
Добавлено в версии v0.1.0
Проверяет, имеют объекты одинаковое значение, по логике R.equals
для указанного свойства. Полезен как каррированный предикат.
var o1 = { a: 1, b: 2, c: 3, d: 4 };
var o2 = { a: 10, b: 20, c: 3, d: 40 };
R.eqProps('a', o1, o2); //=> false
R.eqProps('c', o1, o2); //=> true
Попробуйте в REPL
a → b → Boolean
a |
b |
вернет Boolean |
Добавлено в версии v0.15.0
Вернет true
, если аргументы эквивалентны, иначе false
. Обрабатывает циклические структуры данных.
Применяется к одинаковым методам обоих аргументов, если они есть.
R.equals(1, 1); //=> true
R.equals(1, '1'); //=> false
R.equals([1, 2, 3], [1, 2, 3]); //=> true
var a = {}; a.v = a;
var b = {}; b.v = b;
R.equals(a, b); //=> true
Попробуйте в REPL
{k: (v → v)} → {k: v} → {k: v}
transformations | |
object | |
вернет Object |
Добавлено в версии v0.9.0
Объект, определяющий функции преобразования, применяемые к объекту.
Функция не будет вызывана, если соответствующий ей ключ не существует в изменяемом объекте.
var tomato = {firstName: ' Tomato ', data: {elapsed: 100, remaining: 1400}, id:123};
var transformations = {
firstName: R.trim,
lastName: R.trim, // Не будет вызвано.
data: {elapsed: R.add(1), remaining: R.add(-1)}
};
R.evolve(transformations, tomato); //=> {firstName: 'Tomato', data: {elapsed: 101, remaining: 1399}, id:123}
Попробуйте в REPL
* → Boolean
вернет Boolean |
Добавлено в версии v0.9.0
Функция, которая всегда возвращает false
. Любые переданные параметры игнорируются.
R.F(); //=> false
Попробуйте в REPL
Filterable f => (a → Boolean) → f a → f a
pred | |
filterable | |
вернет Array | отфильтрованный |
Добавлено в версии v0.1.0
Фильтрует коллекцию и возвращает новую, того же типа, содержащую елементы удовлетворяющие условию заданного предиката. Это может быть объект или любой элемент, имеющий метод filter
, например Array
.
Отправляет в метод filter
второй аргумент, если он есть.
Действует как transducer
, если transformer
задан в позиции списка.
Смотрите также reject, transduce, addIndex.
var 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}
R.filter(isEven, '689'); //=> ["6", "8"]
Попробуйте в REPL
(a → Boolean) → [a] → a | undefined
fn | Функция предикат, используемая для определения подходящего элемента. |
list | Массив для рассмотрения |
вернет Object | Элемент найден, или undefined . |
Добавлено в версии v0.1.0
Возвращает первый элемент списка, который соответствует предикату, или undefined
, если элемент не найден.
Отправляет в метод find
второй аргумент, если он присутствует.
Действует как transducer
, если transformer
задан в позиции списка.
Смотрите также transduce.
var xs = [{a: 1}, {a: 2}, {a: 3}];
R.find(R.propEq('a', 2))(xs); //=> {a: 2}
R.find(R.propEq('a', 4))(xs); //=> undefined
Попробуйте в REPL
(a → Boolean) → [a] → Number
fn | Функция предикат, используемая для определения подходящего элемента. |
list | Массив для рассмотрения |
вернет Number | Вернет индекс элемента, если он найден, иначе -1 . |
Добавлено в версии v0.1.1
Возвращает первый элемент списка, который соответствует предикату, или -1
, если элемент не найден.
Действует как transducer
, если transformer
задан в позиции списка.
Смотрите также transduce.
var xs = [{a: 1}, {a: 2}, {a: 3}];
R.findIndex(R.propEq('a', 2))(xs); //=> 1
R.findIndex(R.propEq('a', 4))(xs); //=> -1
Попробуйте в REPL
(a → Boolean) → [a] → a | undefined
fn | Функция предикат, используемая для определения подходящего элемента. |
list | Массив для рассмотрения |
вернет Object | Вернет Object , если он найден, иначе undefined . |
Добавлено в версии v0.1.1
Возвращает последний элемент списка, в котором найдет соответствие предикату, или undefined
, если соответствий не найдено.
Действует как transducer
, если transformer
задан в позиции списка.
Смотрите также transduce.
var xs = [{a: 1, b: 0}, {a:1, b: 1}];
R.findLast(R.propEq('a', 1))(xs); //=> {a: 1, b: 1}
R.findLast(R.propEq('a', 4))(xs); //=> undefined
Попробуйте в REPL
(a → Boolean) → [a] → Number
fn | Функция предикат, используемая для определения подходящего элемента. |
list | Массив для рассмотрения |
вернет Number | Вернет индекс элемента, если он найден, иначе -1 . |
Добавлено в версии v0.1.1
Возвращает индекс последнего, соответсвующего предикату элемента, или -1
, если соответствий не найдено.
Действует как transducer
, если transformer
задан в позиции списка.
Смотрите также transduce.
var xs = [{a: 1, b: 0}, {a:1, b: 1}];
R.findLastIndex(R.propEq('a', 1))(xs); //=> 1
R.findLastIndex(R.propEq('a', 4))(xs); //=> -1
Попробуйте в REPL
[a] → [b]
list | Массив для рассмотрения |
вернет Array | Вернет одномерный массив. |
Добавлено в версии v0.1.0
Вернет новый одномерный массив, со всеми элементами старого (включая элементы вложенных в него массивов).
Смотрите также 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]
Попробуйте в REPL
((a, b, c, …) → z) → (b → a → c → … → z)
fn | Функция вызываемая с измененным порядком первых двух аргументов |
вернет * | Вернет результат вычислений fh . |
Добавлено в версии v0.1.0
Вернет такую же функцию с измененным порядком первых двух аргументов.
var mergeThree = (a, b, c) => [].concat(a, b, c);
mergeThree(1, 2, 3); //=> [1, 2, 3]
R.flip(mergeThree)(1, 2, 3); //=> [2, 1, 3]
Попробуйте в REPL
(a → *) → [a] → [a]
fn | Вызываемая функция, с одним аргументом value |
list | Итерируемый массив |
вернет Array | Вернет оригинальный массив. |
Добавлено в версии v0.1.1
Итерируется по входящему массиву 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
, R.forEach
возвращает оригинальный массив. В некоторых библиотеках этот метод называется each
.
Отправляет в метод forEach
второй аргумент, если он присутствует.
Смотрите также addIndex.
var printXPlusFive = x => console.log(x + 5);
R.forEach(printXPlusFive, [1, 2, 3]); //=> [1, 2, 3]
// logs 6
// logs 7
// logs 8
Попробуйте в REPL
((a, String, StrMap a) → Any) → StrMap a → StrMap a
fn | Вызываемая функция, принимающая три аргумента value , key , object |
obj | Итерируемый объект |
вернет Object | Вернет оригинальный объект. |
Добавлено в версии v0.23.0
Итерируется по входящему объекту obj
, применяя функцию fn
для каждого key
и value
в object
.
fn
принимает три аргумента: (key
, value
, object
)
Смотрите также addIndex.
var printKeyConcatValue = (value, key) => console.log(key + ':' + value);
R.forEachObjIndexed(printKeyConcatValue, {x: 1, y: 2}); //=> {x: 1, y: 2}
// logs x:1
// logs y:2
Попробуйте в REPL
[[k,v]] → {k: v}
pairs | Массив массивов из двух элементов которые будут key и value результирующего объекта |
вернет Object | Вернет объект с key и value равными значениям парных массивов. |
Добавлено в версии v0.3.0
Создаст новый объект из элементов массива pairs
. Если в нескольких парах одинаковый key
то в объект будет добалена последняя.
R.fromPairs([['a', 1], ['b', 2], ['c', 3]]); //=> {a: 1, b: 2, c: 3}
Попробуйте в REPL
(a → String) → [a] → {String: [a]}
fn | Функция :: a -> String |
list | Массив |
вернет Object | Объект c ключами, сопоставленный с массивом элементов, которые произвели этот ключ при передаче в fn . |
Добавлено в версии v0.1.0
Разделяет список на вложенные списки, хранящиеся в объекте, на основе результата вызова функции возвращающей строку для каждого элемента и группы результатов в соответствии с возвращаемыми значениями.
Отправляет методу groupBy
второй аргумента, если он есть.
Действует как transducer
, если transformer
задан в позиции списка.
Смотрите также reduceBy, transduce.
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}]
// }
Попробуйте в REPL
((a, a) → Boolean) → [a] → [[a]]
fn | Функция для определения того, должны ли два заданных (смежных) элемента быть в одной группе |
list | Массив для группировки. Также принимает строку, которая будет рассматриваться как список символов. |
вернет List | Список, содержащий подсписки элементов, конкатенация которых равна исходному списку. |
Добавлено в версии v0.21.0
Принимает список и возвращает список списков, в которых все элементы подсписка удовлетворяются по взаимному сравнению в соответствии с предоставленной функцией. Только соседние элементы передаются в функцию сравнения.
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]]
R.groupWith(R.eqBy(isVowel), 'aestiou')
//=> ['ae', 'st', 'iou']
Попробуйте в REPL
Ord a => a → a → Boolean
a |
list |
вернет Boolean |
Добавлено в версии v0.1.0
Возвращает true
, если первый аргумент больше второго, иначе false
.
Смотрите также it.
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
Попробуйте в REPL
Ord a => a → a → Boolean
a |
list |
вернет Boolean |
Добавлено в версии v0.1.0
Возвращает true
, если первый аргумент больше или равен второму, иначе false
.
Смотрите также ite.
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
Попробуйте в REPL
a → a
x | Возвращаемое значение |
вернет * | Введенное значение x |
Добавлено в версии v0.1.0
Функция, которая ничего не делает, но вернет переданный в нее аргумент. Хорошо подходит, чтобы быть функцией по умолчанию или функцией-заполнителем.
R.identity(1); //=> 1
var obj = {};
R.identity(obj) obj; //=> true
Попробуйте в REPL
a → (b → b) → [c] → a
acc | Аккумулятор. Начальное значеие. |
xf | Функция-преобразователь. Получает и возвращает трансформер. |
list | Список. |
вернет * | Окончательное накопленное значение |
Добавлено в версии v0.12.0
Изменяет элементы списка с помощью преобразователя и добавляет преобразованные элементы в аккумулятор, используя соответствующую функцию итератор, основанную на типе аккумулятора.
Аккумулятор может быть массивом, строкой, объектом или трансформатором. Итерированные элементы будут добавлены в массивы и объединены со строками. Объекты будут смержены, массивы из 2 элементов будут смержены как пары ключ - значение.
Аккумулятор может также быть объектом-трансформером, который обеспечит бинарность (2-арность) сокращение функции-итератора, шаг (step), нулярнисть (0-арность) начального значения функций, Инит (init) и унарнисть (1 - арность) результата извлечениыя функции result
. Функция step
используется в качестве итератора в reduce
. Функция result
используется для преобразования аккумулятора в возвращаемый тип и в большинстве случаев является R.identity
. Функция init
используется для составления начального аккумулятора.
Итерации выполняются с помощью R.reduce
после инициализации преобразователя (transducer).
var numbers = [1, 2, 3, 4];
var transducer = R.compose(R.map(R.add(1)), R.take(2));
R.into([], transducer, numbers); //=> [2, 3]
var intoArray = R.into([]);
intoArray(transducer, numbers); //=> [2, 3]
Попробуйте в REPL
Functor f => (a → b) → f a → f b
fn | Фунция, которая должна быть вызвана по отношению к каждому элементу из списка (list ). |
list | Итерируемый список. |
вернет Array | Новый список. |
Добавлено в версии v0.1.0
Принимает функцию и функтор, применяет функцию к каждому значению в функторе и вернет функтор такой же формы.
Ramda предоставляет удобную реализацию map
для Array
и Object
, поэтому эта Функция может быть применена как к [1, 2, 3]
, так и к {x 1, y 2, z 3 }
.
Отправляет в метод map
второй аргумент, если он есть.
Ведет себя как трансдьюсер (transducer
), если transformer
передан вместо списка.
Также воспринимает функции как функторы и сделает из них композицию.
Смотрите также transduce, addIndex.
var 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}
Попробуйте в REPL