Spec-Zone.ru › Ramda

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, если этим аргументам удовлетворяют все переданные предикаты.

Возвращаемая функция — каррированная функция, арность которой совпадает с арностью предиката с наибольшей арностью.

См. также anyPass, both.

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.

См. также both, or.

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, если этим аргументам удовлетворяет хотя бы один из переданных предикатов.

Возвращаемая функция — каррированная функция, арность которой совпадает с арностью предиката с наибольшей арностью.

См. также allPass, either.

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 должна быть привязанной функцией, если контекст имеет значение.

См. также call, unapply.

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`, устанавливая для каждого свойства значение, возвращённое соответствующей функцией при вызове с переданными аргументами.

Принимает объект-спецификацию, рекурсивно сопоставляющий свойства функциям, и создаёт функцию, возвращающую объект той же структуры, сопоставляя каждому свойству результат вызова соответствующей функции с переданными аргументами.

См. также converge, juxt.

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 Новый объект, эквивалентный исходному, за исключением изменённого свойства.

Создаёт поверхностную копию объекта, задавая или переопределяя указанное свойство переданным значением. Обратите внимание, что свойства прототипа также копируются и переносятся в новый объект. Все непримитивные свойства копируются по ссылке.

См. также dissoc, pick.

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 параметра. Лишние параметры не передаются исходной функции.

См. также nAry, unary.

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 Массив массивов, каждый из которых содержит элементы, для которых функция, возвращающая строку, вернула одинаковое значение.

Разбивает список на подсписки, вызывая для каждого элемента функцию, возвращающую ключ, и группируя результаты в соответствии с возвращёнными значениями.

См. также groupBy, partition.

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 автоматически не каррируется. Преобразующая функция не применяется к последнему аргументу.

См. также compose, pipeWith.

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 будет работать с ними некорректно.

См. также curryN, partial.

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.

См. также assoc, omit.

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.

См. также both, anyPass, or.

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, если соответствующих элементов нет.

Работает как трансдьюсер, если на месте списка передан трансформер.

См. также transduce, indexOf.

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` в пары.

Создает новый объект из списка пар «ключ-значение». Если ключ встречается в нескольких парах, в объект включается пара, расположенная правее.

См. также toPairs, pair.

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.

См. также tail, init, last.

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 получает арность, равную наибольшей арности из трех переданных ей функций.

См. также unless, when, cond.

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

Возвращает

  • *

Возвращает все элементы заданного списка или строки, кроме последнего.

См. также last, head, tail.

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.

См. также empty, isEmpty.

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.

См. также keys, valuesIn.

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

Возвращает

  • *

Возвращает последний элемент указанного списка или строки.

См. также init, head, tail.

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 | Symbol
Lens s a = Functor f => (a → f a) → s → f s

Параметры

  • path

    Путь для использования.

Возвращает

  • Lens

Возвращает линзу, фокусом которой является указанный путь.

См. также view, set, over.

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

Возвращает линзу, фокусом которой является указанное свойство.

См. также view, set, over.

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.

См. также lift, ap.

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].

См. также addIndex, mapAccum.

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

Возвращает

  • *

Возвращает большее из двух аргументов.

См. также maxBy, min.

R.max(789, 123); //=> 789
R.max('a', 'b'); //=> 'b'

maxBy Добавлено в v0.8.0

Ord b => (a → b) → a → a → a

Параметры

  • f
  • a
  • b

Возвращает

  • *

Принимает функцию и два значения и возвращает то из них, которое даёт больший результат при передаче в указанную функцию.

См. также max, minBy.

//  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

Возвращает

  • *

Возвращает меньшее из двух аргументов.

См. также minBy, max.

R.min(789, 123); //=> 123
R.min('a', 'b'); //=> 'a'

minBy Добавлено в v0.8.0

Ord b => (a → b) → a → a → a

Параметры

  • f
  • a
  • b

Возвращает

  • *

Принимает функцию и два значения и возвращает то из них, которое даёт меньший результат при передаче в указанную функцию.

См. также min, maxBy.

//  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 параметров. Лишние параметры не будут переданы исходной функции.

См. также binary, unary.

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, вызывает его.

Работает как трансдьюсер, если вместо списка передан трансформер.

См. также all, any.

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 выбрано из-за сходства с математическим оператором композиции ∘.

См. также compose, pipe.

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.

См. также either, and.

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].

См. также objOf, of.

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.

См. также filter, reject.

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 | NonNegativeInt
Idx = 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`.

Возвращает частичную копию объекта, содержащую только указанные ключи. Если ключ не существует, свойство игнорируется.

См. также omit, props.

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`.

Возвращает частичную копию объекта, содержащую только ключи, удовлетворяющие заданному предикату.

См. также pick, filter.

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.

См. также pluck, props, prop.

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

См. также 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.

См. также reduce, 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 Результат замены существующих ключей соответствующими значениями из объекта сопоставления, если они найдены

Преобразует объект в новый, заменяя все ключи, совпадающие с ключами объекта сопоставления, соответствующими значениями из этого объекта.

См. также mapKeys, rebuild.

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, но возвращает список последовательно вычисленных слева направо результатов свёртки.

Работает как трансдьюсер, если в качестве списка передан трансформер.

См. также reduce, mapAccum.

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 Новый массив, элементы которого отсортированы функцией сравнения.

Возвращает копию списка, отсортированную функцией сравнения, которая должна принимать два значения и возвращать отрицательное число, если первое значение меньше второго, положительное — если больше, и ноль, если они равны. Обратите внимание: возвращается копия списка. Исходный список не изменяется.

См. также ascend, descend.

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 Новый список, отсортированный согласно функциям сравнения.

Сортирует список согласно списку функций сравнения.

См. также ascend, descend.

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, вызывает его.

См. также head, init, last.

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.

Оборачивает функцию с любой арностью (в том числе нулевой) в функцию, принимающую ровно один параметр. Лишние параметры не передаются исходной функции.

См. также binary, nAry.

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, которая может принимать один или несколько аргументов при каждом вызове.

См. также curry, curryN.

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 с тем же аргументом. Если предикат выполняется, аргумент возвращается без изменений.

См. также ifElse, when, cond.

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.

См. также flatten, 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.

См. также values, keysIn.

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.

См. также propEq, 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.

См. также or, and.

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API