Spec-Zone.ru › Immutable.js

Список

Списки — это упорядоченные, индексированные плотные коллекции, очень похожие на массив JavaScript.

type List<T> extends Collection.Indexed<T>

Обсуждение

Списки неизменяемы и полностью персистентны с операциями получения и установки за O(log32 N), и операциями добавления и удаления за O(1).

Списки реализуют Deque, с эффективными добавлением и удалением с обоих концов (push, pop) и начала (unshift, shift).

В отличие от массива JavaScript, нет различия между «неустановленным» индексом и индексом, установленным на undefined. List#forEach посещает все индексы от 0 до размера, независимо от того, были ли они явно определены.

Создание

Список()

Создайте новый неизменяемый список, содержащий значения из предоставенной коллекции.

List<T>(collection?: Iterable<T> | ArrayLike<T>): List<T>

Обсуждение

Примечание: List — это функция-фабрика, а не класс, и не использует ключевое слово new при создании.

const { List, Set } = require('immutable')

const emptyList = List()
// List []

const plainArray = [ 1, 2, 3, 4 ]
const listFromPlainArray = List(plainArray)
// List [ 1, 2, 3, 4 ]

const plainSet = Set([ 1, 2, 3, 4 ])
const listFromPlainSet = List(plainSet)
// List [ 1, 2, 3, 4 ]

const arrayIterator = plainArray[Symbol.iterator]()
const listFromCollectionArray = List(arrayIterator)
// List [ 1, 2, 3, 4 ]

listFromPlainArray.equals(listFromCollectionArray) // true
listFromPlainSet.equals(listFromCollectionArray) // true
listFromPlainSet.equals(listFromPlainArray) // truerun it

Статические методы

Список.isList()

List.isList(maybeList: unknown): boolean

Список.of()

List.of<T>(...values: Array<T>): List<T>

Члены

размер

Количество элементов в этом списке.

size: number

Постоянные изменения

set()

Возвращает новый список, включающий value по индексу index. Если index уже существует в этом списке, оно будет заменено.

set(index: number, value: T): List<T>

Обсуждение

Индекс index может быть отрицательным числом, что индексирует назад с конца списка. v.set(-1, "value") устанавливает последний элемент в списке.

Если index больше, чем size, размер возвращаемого списка size будет достаточно большим, чтобы включить index.

const originalList = List([ 0 ]);
// List [ 0 ]
originalList.set(1, 1);
// List [ 0, 1 ]
originalList.set(0, 'overwritten');
// List [ "overwritten" ]
originalList.set(2, 2);
// List [ 0, undefined, 2 ]

List().set(50000, 'value').size;
// 50001run it

Примечание: set может использоваться в withMutations.

delete()

Возвращает новый список, исключая этот index и с размером на 1 меньше, чем у этого списка. Значения с индексами выше index сдвигаются вниз на 1 позицию, чтобы заполнить освободившееся место.

delete(index: number): List<T>

псевдоним

remove()

Обсуждение

Это синоним list.splice(index, 1).

Индекс index может быть отрицательным числом, что индексирует назад с конца списка. v.delete(-1) удаляет последний элемент из списка.

Примечание: delete нельзя безопасно использовать в IE8

List([ 0, 1, 2, 3, 4 ]).delete(0);
// List [ 1, 2, 3, 4 ]run it

Поскольку delete() переиндексирует значения, он создаёт полную копию, что имеет сложность O(N).

Примечание: delete нельзя использовать в withMutations.

insert()

Возвращает новый список с value по индексу index с размером на 1 больше, чем у этого списка. Значения с индексами выше index сдвигаются на 1 позицию.

insert(index: number, value: T): List<T>

Обсуждение

Это синоним list.splice(index, 0, value).

List([ 0, 1, 2, 3, 4 ]).insert(6, 5)
// List [ 0, 1, 2, 3, 4, 5 ]run it

Поскольку insert() переиндексирует значения, он создаёт полную копию, что имеет сложность O(N).

Примечание: insert нельзя использовать в withMutations.

очистить()

Возвращает новый список с размером 0 и без значений за константное время.

clear(): List<T>

Обсуждение

List([ 1, 2, 3, 4 ]).clear()
// List []run it

Примечание: clear может использоваться в withMutations.

добавить()

Возвращает новый список, в который добавлен values, начиная с size этого списка.

push(...values: Array<T>): List<T>

Обсуждение

List([ 1, 2, 3, 4 ]).push(5)
// List [ 1, 2, 3, 4, 5 ]run it

Примечание: push может использоваться в withMutations.

удалить()

Возвращает новый список с размером на единицу меньше, чем у этого списка, исключая последний индекс в этом списке.

pop(): List<T>

Обсуждение

Это отличается от Array#pop, так как возвращает новый список, а не удалённое значение. Используйте last() для получения последнего значения в этом списке.

List([ 1, 2, 3, 4 ]).pop()
// List[ 1, 2, 3 ]

Примечание: pop может использоваться в withMutations.

вставить в начало

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

unshift(...values: Array<T>): List<T>

Обсуждение

List([ 2, 3, 4]).unshift(1);
// List [ 1, 2, 3, 4 ]run it

Примечание: unshift может использоваться в withMutations.

удалить из начала

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

shift(): List<T>

Обсуждение

Это отличается от Array#shift, так как возвращает новый список, а не удалённое значение. Используйте first() для получения первого значения в этом списке.

List([ 0, 1, 2, 3, 4 ]).shift();
// List [ 1, 2, 3, 4 ]run it

Примечание: shift может использоваться в withMutations.

обновить

update(index: number, notSetValue: T, updater: (value: T) => T): this
update(index: number, updater: (value: T | undefined) => T): this
update<R>(updater: (value: this) => R): R

Переопределяет

Collection#update()

установить размер

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

setSize(size: number): List<T>

Обсуждение

При создании нового списка и предварительно известном конечном размере, использование setSize в сочетании с withMutations может привести к более эффективному созданию.

Глубокие постоянные изменения

setIn()

Возвращает новый список, установив value по пути keyPath. Если какие-либо ключи в keyPath отсутствуют, по этому ключу будет создана новая неизменяемая карта.

setIn(keyPath: Iterable<unknown>, value: unknown): this

Обсуждение

Используются индексы в качестве ключей для определения пути в списке.

const { List } = require('immutable')
const list = List([ 0, 1, 2, List([ 3, 4 ])])
list.setIn([3, 0], 999);
// List [ 0, 1, 2, List [ 999, 4 ] ]run it

Простые объекты JavaScript или массивы могут быть вложены в коллекцию Immutable.js, и setIn() может обновлять эти значения, обрабатывая их неизменяемо, создавая новые копии этих значений с применёнными изменениями.

const { List } = require('immutable')
const list = List([ 0, 1, 2, { plain: 'object' }])
list.setIn([3, 'plain'], 'value');
// List([ 0, 1, 2, { plain: 'value' }])run it

Примечание: setIn может использоваться в withMutations.

deleteIn()

Возвращает новый список, удалив значение по этому keyPath. Если какие-либо ключи в keyPath отсутствуют, никаких изменений не произойдёт.

deleteIn(keyPath: Iterable<unknown>): this

псевдоним

removeIn()

Обсуждение

const { List } = require('immutable')
const list = List([ 0, 1, 2, List([ 3, 4 ])])
list.deleteIn([3, 0]);
// List [ 0, 1, 2, List [ 4 ] ]run it

Простые объекты JavaScript или массивы могут быть вложены в коллекцию Immutable.js, и removeIn() может обновлять эти значения, обрабатывая их неизменяемо, создавая новые копии этих значений с применёнными изменениями.

const { List } = require('immutable')
const list = List([ 0, 1, 2, { plain: 'object' }])
list.removeIn([3, 'plain']);
// List([ 0, 1, 2, {}])run it

Примечание: deleteIn нельзя безопасно использовать в withMutations.

updateIn()

updateIn(keyPath: Iterable<unknown>,notSetValue: unknown,updater: (value: unknown) => unknown): this
updateIn(keyPath: Iterable<unknown>, updater: (value: unknown) => unknown): this

mergeIn()

Примечание: mergeIn может использоваться в withMutations.

mergeIn(keyPath: Iterable<unknown>, ...collections: Array<unknown>): this

см. также

Map#mergeIn

mergeDeepIn()

Примечание: mergeDeepIn может использоваться в withMutations.

mergeDeepIn(keyPath: Iterable<unknown>, ...collections: Array<unknown>): this

см. также

Map#mergeDeepIn

Временные изменения

withMutations()

Примечание: не все методы могут быть безопасно использованы с изменяемой коллекцией или внутри withMutations! Проверьте документацию каждого метода, чтобы узнать, разрешено ли его использование в withMutations.

withMutations(mutator: (mutable: this) => unknown): this

см. также

Map#withMutations

asMutable()

Альтернативный API для withMutations()

asMutable(): this

см. также

Map#asMutable

Обсуждение

Примечание: не все методы могут быть безопасно использованы с изменяемой коллекцией или внутри withMutations! Проверьте документацию каждого метода, чтобы узнать, разрешено ли его использование в withMutations.

wasAltered()

wasAltered(): boolean

см. также

Map#wasAltered

asImmutable()

asImmutable(): this

см. также

Map#asImmutable

Алгоритмы последовательностей

concat()

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

concat<C>(...valuesOrCollections: Array<Iterable<C> | C>): List<T | C>

Переопределяет

Collection.Indexed#concat()

псевдоним

merge()

Обсуждение

Примечание: concat может использоваться в withMutations.

map()

Возвращает новый список со значениями, обработанными функцией mapper.

map<M>(mapper: (value: T, key: number, iter: this) => M,context?: unknown): List<M>

Переопределяет

Collection.Indexed#map()

Обсуждение

List([ 1, 2 ]).map(x => 10 * x)
// List [ 10, 20 ]run it

flatMap()

Плоская карта списка, возвращая новый список.

flatMap<M>(mapper: (value: T, key: number, iter: this) => Iterable<M>,context?: unknown): List<M>

Переопределяет

Collection.Indexed#flatMap()

Обсуждение

Аналогично list.map(...).flatten(true).

фильтр()

filter<F>(predicate: (value: T, index: number, iter: this) => boolean,context?: unknown): List<F>
filter(predicate: (value: T, index: number, iter: this) => unknown,context?: unknown): this

Переопределяет

Collection.Indexed#filter()

partition()

partition<F, C>(predicate: (this: C, value: T, index: number, iter: this) => boolean,context?: C): [List<T>, List<F>]
partition<C>(predicate: (this: C, value: T, index: number, iter: this) => unknown,context?: C): [this, this]

Overrides

Collection.Indexed#partition()

zip()

zip<U>(other: Collection<unknown, U>): List<[T, U]>
zip<U, V>(other: Collection<unknown, U>,other2: Collection<unknown, V>): List<[T, U, V]>
zip(...collections: Array<Collection<unknown, unknown>>): List<unknown>

Overrides

Collection.Indexed#zip()

zipAll()

zipAll<U>(other: Collection<unknown, U>): List<[T, U]>
zipAll<U, V>(other: Collection<unknown, U>,other2: Collection<unknown, V>): List<[T, U, V]>
zipAll(...collections: Array<Collection<unknown, unknown>>): List<unknown>

Overrides

Collection.Indexed#zipAll()

zipWith()

zipWith<U, Z>(zipper: (value: T, otherValue: U) => Z,otherCollection: Collection<unknown, U>): List<Z>
zipWith<U, V, Z>(zipper: (value: T, otherValue: U, thirdValue: V) => Z,otherCollection: Collection<unknown, U>,thirdCollection: Collection<unknown, V>): List<Z>
zipWith<Z>(zipper: (...values: Array<unknown>) => Z,...collections: Array<Collection<unknown, unknown>>): List<Z>

Overrides

Collection.Indexed#zipWith()

[Symbol.iterator]()

[Symbol.iterator](): IterableIterator<T>

Inherited from

Collection.Indexed#[Symbol.iterator]()

filterNot()

Возвращает новую коллекцию того же типа, содержащую только те записи, для которых функция predicate возвращает значение false.

filterNot(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): this

Inherited from

Collection#filterNot()

Обсуждение

const { Map } = require('immutable')
Map({ a: 1, b: 2, c: 3, d: 4}).filterNot(x => x % 2 === 0)
// Map { "a": 1, "c": 3 }run it

Примечание: filterNot() всегда возвращает новый экземпляр, даже если в результате не происходит никакого фильтрации значений.

reverse()

Возвращает новую коллекцию того же типа в обратном порядке.

reverse(): this

Inherited from

Collection#reverse()

sort()

Возвращает новую коллекцию того же типа, содержащую те же записи, устойчиво отсортированные с использованием comparator.

sort(comparator?: (valueA: T, valueB: T) => number): this

Inherited from

Collection#sort()

Обсуждение

Если comparator не указана, используется компаратор по умолчанию, основанный на < и >.

comparator(valueA, valueB):

  • Возвращает 0 если элементы не должны меняться местами.
  • Возвращает -1 (или любое отрицательное число), если valueA предшествует valueB
  • Возвращает 1 (или любое положительное число), если valueA следует за valueB
  • Является чистой функцией, т.е. всегда должна возвращать одно и то же значение для одной и той же пары значений.

При сортировке коллекций, у которых нет определённого порядка, будут возвращены их упорядоченные эквиваленты. Например, map.sort() возвращает OrderedMap.

const { Map } = require('immutable')
Map({ "c": 3, "a": 1, "b": 2 }).sort((a, b) => {
  if (a < b) { return -1; }
  if (a > b) { return 1; }
  if (a === b) { return 0; }
});
// OrderedMap { "a": 1, "b": 2, "c": 3 }run it

Примечание: sort() всегда возвращает новый экземпляр, даже если исходный уже был отсортирован.

Примечание: Это всегда операция с немедленным результатом.

sortBy()

Как sort, но также принимает comparatorValueMapper, что позволяет сортировать более сложными способами:

sortBy<C>(comparatorValueMapper: (value: T, key: number, iter: this) => C,comparator?: (valueA: C, valueB: C) => number): this

Inherited from

Collection#sortBy()

Обсуждение

const { Map } = require('immutable')
const beattles = Map({
  John: { name: "Lennon" },
  Paul: { name: "McCartney" },
  George: { name: "Harrison" },
  Ringo: { name: "Starr" },
});
beattles.sortBy(member => member.name);run it

Примечание: sortBy() всегда возвращает новый экземпляр, даже если исходный уже был отсортирован.

Примечание: Это всегда операция с немедленным результатом.

groupBy()

Возвращает Collection.Keyed Collection.Keyeds, сгруппированные по результату работы функции grouper.

groupBy<G>(grouper: (value: T, key: number, iter: this) => G,context?: unknown): Seq.Keyed<G, Collection<number, T>>

Inherited from

Collection#groupBy()

Обсуждение

Примечание: Это всегда операция с немедленным результатом.

const { List, Map } = require('immutable')
const listOfMaps = List([
  Map({ v: 0 }),
  Map({ v: 1 }),
  Map({ v: 1 }),
  Map({ v: 0 }),
  Map({ v: 2 })
])
const groupsOfMaps = listOfMaps.groupBy(x => x.get('v'))
// Map {
//   0: List [ Map{ "v": 0 }, Map { "v": 0 } ],
//   1: List [ Map{ "v": 1 }, Map { "v": 1 } ],
//   2: List [ Map{ "v": 2 } ],
// }run it

Преобразование в типы JavaScript

toJS()

Глубоко преобразует эту индексированную коллекцию в эквивалентный встроенный JavaScript массив.

toJS(): Array<DeepCopy<T>>

Inherited from

Collection.Indexed#toJS()

toJSON()

Поверхностно преобразует эту индексированную коллекцию в эквивалентный встроенный JavaScript массив.

toJSON(): Array<T>

Inherited from

Collection.Indexed#toJSON()

toArray()

Поверхностно преобразует эту коллекцию в массив.

toArray(): Array<T>

Inherited from

Collection.Indexed#toArray()

toObject()

Поверхностно преобразует эту коллекцию в объект.

toObject(): {[key: string]: T}

Inherited from

Collection#toObject()

Обсуждение

Преобразует ключи в строки.

Чтение значений

get()

get<NSV>(index: number, notSetValue: NSV): T | NSV
get(index: number): T | undefined

Inherited from

Collection.Indexed#get()

has()

True, если ключ существует в этой Collection, используя Immutable.is для определения равенства

has(key: number): boolean

Inherited from

Collection#has()

includes()

True, если значение существует в этой Collection, используя Immutable.is для определения равенства

includes(value: T): boolean

Inherited from

Collection#includes()

alias

contains()

first()

Если Collection не пуста, возвращает первый элемент Collection. Если Collection пуста, возвращает необязательное значение по умолчанию, если оно указано; в противном случае возвращает undefined.

first<NSV>(notSetValue?: NSV): T | NSV

Inherited from

Collection#first()

last()

Если Collection не пуста, возвращает последний элемент Collection. Если Collection пуста, возвращает необязательное значение по умолчанию, если оно указано; в противном случае возвращает undefined.

last<NSV>(notSetValue?: NSV): T | NSV

Inherited from

Collection#last()

Преобразование в Seq

toSeq()

Возвращает Seq.Indexed.

toSeq(): Seq.Indexed<T>

Inherited from

Collection.Indexed#toSeq()

fromEntrySeq()

Если это коллекция пар [ключ, значение], она вернёт Seq.Keyed из этих пар.

fromEntrySeq(): Seq.Keyed<unknown, unknown>

Inherited from

Collection.Indexed#fromEntrySeq()

toKeyedSeq()

Возвращает Seq.Keyed из этой коллекции, где индексы используются в качестве ключей.

toKeyedSeq(): Seq.Keyed<number, T>

Inherited from

Collection#toKeyedSeq()

Обсуждение

Это полезно, если вы хотите работать с Collection.Indexed и сохранить пары [индекс, значение].

Возвращаемый Seq будет иметь такой же порядок итерации, как и эта коллекция.

const { Seq } = require('immutable')
const indexedSeq = Seq([ 'A', 'B', 'C' ])
// Seq [ "A", "B", "C" ]
indexedSeq.filter(v => v === 'B')
// Seq [ "B" ]
const keyedSeq = indexedSeq.toKeyedSeq()
// Seq { 0: "A", 1: "B", 2: "C" }
keyedSeq.filter(v => v === 'B')
// Seq { 1: "B" }run it

toIndexedSeq()

Возвращает Seq.Indexed значений этой коллекции, отбрасывая ключи.

toIndexedSeq(): Seq.Indexed<T>

Inherited from

Collection#toIndexedSeq()

toSetSeq()

Возвращает Seq.Set значений этой коллекции, отбрасывая ключи.

toSetSeq(): Seq.Set<T>

Inherited from

Collection#toSetSeq()

Комбинирование

interpose()

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

interpose(separator: T): this

Inherited from

Collection.Indexed#interpose()

interleave()

Возвращает коллекцию того же типа со вставленными collections в эту коллекцию.

interleave(...collections: Array<Collection<unknown, T>>): this

Inherited from

Collection.Indexed#interleave()

Обсуждение

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

const { List } = require('immutable')
List([ 1, 2, 3 ]).interleave(List([ 'A', 'B', 'C' ]))
// List [ 1, "A", 2, "B", 3, "C" ]run it

Самая короткая коллекция прекращает вставку.

List([ 1, 2, 3 ]).interleave(
  List([ 'A', 'B' ]),
  List([ 'X', 'Y', 'Z' ])
)
// List [ 1, "A", "X", 2, "B", "Y" ]run it

Поскольку interleave() переиндексирует значения, она создаёт полную копию с сложностью O(N).

Примечание: interleave нельзя использовать в withMutations.

splice()

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

splice(index: number, removeNum: number, ...values: Array<T>): this

Inherited from

Collection.Indexed#splice()

Обсуждение

index может быть отрицательным числом, которое индексирует со конца коллекции. s.splice(-2) вставляет после второго с конца элемента.

const { List } = require('immutable')
List([ 'a', 'b', 'c', 'd' ]).splice(1, 2, 'q', 'r', 's')
// List [ "a", "q", "r", "s", "d" ]run it

Поскольку splice() переиндексирует значения, она создаёт полную копию с сложностью O(N).

Примечание: splice нельзя использовать в withMutations.

flatten()

flatten(depth?: number): Collection<unknown, unknown>
flatten(shallow?: boolean): Collection<unknown, unknown>

Inherited from

Collection#flatten()

Поиск значения

indexOf()

Возвращает первый индекс, на котором заданное значение можно найти в коллекции, или -1, если его нет.

indexOf(searchValue: T): number

Inherited from

Collection.Indexed#indexOf()

lastIndexOf()

Возвращает последний индекс, на котором заданное значение можно найти в коллекции, или -1, если его нет.

lastIndexOf(searchValue: T): number

Inherited from

Collection.Indexed#lastIndexOf()

findIndex()

Возвращает первый индекс в коллекции, где значение удовлетворяет заданной предикатной функции. В противном случае возвращается -1.

findIndex(predicate: (value: T, index: number, iter: this) => boolean,context?: unknown): number

Inherited from

Collection.Indexed#findIndex()

findLastIndex()

Возвращает последний индекс в коллекции, где значение удовлетворяет заданной предикатной функции. В противном случае возвращается -1.

findLastIndex(predicate: (value: T, index: number, iter: this) => boolean,context?: unknown): number

Inherited from

Collection.Indexed#findLastIndex()

find()

Возвращает первое значение, для которого predicate возвращает true.

find(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown,notSetValue?: T): T | undefined

Inherited from

Collection#find()

findLast()

Возвращает последнее значение, для которого predicate возвращает true.

findLast(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown,notSetValue?: T): T | undefined

Унаследовано от

Collection#findLast()

Обсуждение

Примечание: predicate будет вызываться для каждой записи в обратном порядке.

findEntry()

Возвращает первую запись [ключ, значение], для которой predicate возвращает true.

findEntry(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown,notSetValue?: T): [number, T] | undefined

Унаследовано от

Collection#findEntry()

findLastEntry()

Возвращает последнюю запись [ключ, значение], для которой predicate возвращает true.

findLastEntry(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown,notSetValue?: T): [number, T] | undefined

Унаследовано от

Collection#findLastEntry()

Обсуждение

Примечание: predicate будет вызываться для каждой записи в обратном порядке.

findKey()

Возвращает ключ, для которого predicate возвращает true.

findKey(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): number | undefined

Унаследовано от

Collection#findKey()

findLastKey()

Возвращает последний ключ, для которого predicate возвращает true.

findLastKey(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): number | undefined

Унаследовано от

Collection#findLastKey()

Обсуждение

Примечание: predicate будет вызываться для каждой записи в обратном порядке.

keyOf()

Возвращает ключ, связанный со значением поиска, или undefined.

keyOf(searchValue: T): number | undefined

Унаследовано от

Collection#keyOf()

lastKeyOf()

Возвращает последний ключ, связанный со значением поиска, или undefined.

lastKeyOf(searchValue: T): number | undefined

Унаследовано от

Collection#lastKeyOf()

max()

Возвращает максимальное значение в этом наборе. Если какие-либо значения сравнительно эквивалентны, возвращается первое найденное.

max(comparator?: (valueA: T, valueB: T) => number): T | undefined

Унаследовано от

Collection#max()

Обсуждение

Функция comparator используется аналогично Collection#sort. Если она не указана, используется стандартный компаратор >.

При равенстве значений возвращается первое найденное. В противном случае, max будет работать независимо от порядка ввода, при условии, что компаратор является коммутативным. Стандартный компаратор > коммутативен *только* тогда, когда типы значений не отличаются.

Если comparator возвращает 0, и хотя бы одно из значений равно NaN, undefined или null, возвращается это значение.

maxBy()

Аналогично max, но также принимает comparatorValueMapper, что позволяет сравнивать значения более сложными способами:

maxBy<C>(comparatorValueMapper: (value: T, key: number, iter: this) => C,comparator?: (valueA: C, valueB: C) => number): T | undefined

Унаследовано от

Collection#maxBy()

Обсуждение

const { List, } = require('immutable');
const l = List([
  { name: 'Bob', avgHit: 1 },
  { name: 'Max', avgHit: 3 },
  { name: 'Lili', avgHit: 2 } ,
]);
l.maxBy(i => i.avgHit); // will output { name: 'Max', avgHit: 3 }run it

min()

Возвращает минимальное значение в этом наборе. Если какие-либо значения сравнительно эквивалентны, возвращается первое найденное.

min(comparator?: (valueA: T, valueB: T) => number): T | undefined

Унаследовано от

Collection#min()

Обсуждение

Функция comparator используется аналогично Collection#sort. Если она не указана, используется стандартный компаратор <.

При равенстве значений возвращается первое найденное. В противном случае, min будет работать независимо от порядка ввода, при условии, что компаратор является коммутативным. Стандартный компаратор < коммутативен *только* тогда, когда типы значений не отличаются.

Если comparator возвращает 0, и хотя бы одно из значений равно NaN, undefined или null, возвращается это значение.

minBy()

Аналогично min, но также принимает comparatorValueMapper, что позволяет сравнивать значения более сложными способами:

minBy<C>(comparatorValueMapper: (value: T, key: number, iter: this) => C,comparator?: (valueA: C, valueB: C) => number): T | undefined

Унаследовано от

Collection#minBy()

Обсуждение

const { List, } = require('immutable');
const l = List([
  { name: 'Bob', avgHit: 1 },
  { name: 'Max', avgHit: 3 },
  { name: 'Lili', avgHit: 2 } ,
]);
l.minBy(i => i.avgHit); // will output { name: 'Bob', avgHit: 1 }run it

Равенство значений

equals()

True, если у этого и другого набора есть равенство значений, как определено Immutable.is().

equals(other: unknown): boolean

Унаследовано от

Collection#equals()

Обсуждение

Примечание: Это эквивалентно Immutable.is(this, other), но предоставлено для цепочки выражений.

hashCode()

Вычисляет и возвращает хэш-идентификатор для этого набора.

hashCode(): number

Унаследовано от

Collection#hashCode()

Обсуждение

Хэш-код набора используется для определения потенциального равенства и используется при добавлении в Set или в качестве ключа в Map, что позволяет выполнять поиск по другому экземпляру.

const a = List([ 1, 2, 3 ]);
const b = List([ 1, 2, 3 ]);
assert.notStrictEqual(a, b); // different instances
const set = Set([ a ]);
assert.equal(set.has(b), true);run it

Если у двух значений одинаковый хэш-код, они не гарантированно равны. Если у двух значений разные хэш-коды, они не могут быть равны.

Чтение глубоких значений

getIn()

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

getIn(searchKeyPath: Iterable<unknown>, notSetValue?: unknown): unknown

Унаследовано от

Collection#getIn()

Обсуждение

const { Map, List } = require('immutable')
const deepData = Map({ x: List([ Map({ y: 123 }) ]) });
deepData.getIn(['x', 0, 'y']) // 123run it

Простые JavaScript объекты или массивы могут быть вложены в Immutable.js набор, и getIn() может получить доступ к этим значениям тоже:

const { Map, List } = require('immutable')
const deepData = Map({ x: [ { y: 123 } ] });
deepData.getIn(['x', 0, 'y']) // 123run it

hasIn()

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

hasIn(searchKeyPath: Iterable<unknown>): boolean

Унаследовано от

Collection#hasIn()

Преобразование в наборы

toMap()

Преобразует этот набор в карту. Бросает исключение, если ключи не хешируются.

toMap(): Map<number, T>

Унаследовано от

Collection#toMap()

Обсуждение

Примечание: Это эквивалентно Map(this.toKeyedSeq()), но предоставлено для удобства и цепочки выражений.

toOrderedMap()

Преобразует этот набор в карту, сохраняя порядок итерации.

toOrderedMap(): OrderedMap<number, T>

Унаследовано от

Collection#toOrderedMap()

Обсуждение

Примечание: Это эквивалентно OrderedMap(this.toKeyedSeq()), но предоставлено для удобства и цепочки выражений.

toSet()

Преобразует этот набор в множество, отбрасывая ключи. Бросает исключение, если значения не хешируются.

toSet(): Set<T>

Унаследовано от

Collection#toSet()

Обсуждение

Примечание: Это эквивалентно Set(this), но предоставлено для цепочки выражений.

toOrderedSet()

Преобразует этот набор в множество, сохраняя порядок итерации и отбрасывая ключи.

toOrderedSet(): OrderedSet<T>

Унаследовано от

Collection#toOrderedSet()

Обсуждение

Примечание: Это эквивалентно OrderedSet(this.valueSeq()), но предоставлено для удобства и цепочки выражений.

toList()

Преобразует этот набор в список, отбрасывая ключи.

toList(): List<T>

Унаследовано от

Collection#toList()

Обсуждение

Это аналогично List(collection), но предоставлено для цепочки выражений. Однако, при вызове на Map или других наборах с ключами, collection.toList() отбрасывает ключи и создает список только значений, в то время как List(collection) создает список кортежей записей.

const { Map, List } = require('immutable')
var myMap = Map({ a: 'Apple', b: 'Banana' })
List(myMap) // List [ [ "a", "Apple" ], [ "b", "Banana" ] ]
myMap.toList() // List [ "Apple", "Banana" ]run it

toStack()

Преобразует этот набор в стек, отбрасывая ключи. Бросает исключение, если значения не хешируются.

toStack(): Stack<T>

Унаследовано от

Collection#toStack()

Обсуждение

Примечание: Это эквивалентно Stack(this), но предоставлено для цепочки выражений.

Итераторы

keys()

Итератор ключей этого Collection.

keys(): IterableIterator<number>

Унаследовано от

Collection#keys()

Обсуждение

Примечание: это вернет ES6 итератор, который не поддерживает алгоритмы последовательностей Immutable.js. Используйте keySeq вместо этого, если это то, что вам нужно.

values()

Итератор значений этого Collection.

values(): IterableIterator<T>

Унаследовано от

Collection#values()

Обсуждение

Примечание: это вернет ES6 итератор, который не поддерживает алгоритмы последовательностей Immutable.js. Используйте valueSeq вместо этого, если это то, что вам нужно.

entries()

Итератор записей этого Collection в виде кортежей [ key, value ].

entries(): IterableIterator<[number, T]>

Унаследовано от

Collection#entries()

Обсуждение

Примечание: это вернет ES6 итератор, который не поддерживает алгоритмы последовательностей Immutable.js. Используйте entrySeq вместо этого, если это то, что вам нужно.

Наборы (Seq)

keySeq()

Возвращает новый Seq.Indexed ключей этого набора, отбрасывая значения.

keySeq(): Seq.Indexed<number>

Унаследовано от

Collection#keySeq()

valueSeq()

Возвращает Seq.Indexed значений этого набора, отбрасывая ключи.

valueSeq(): Seq.Indexed<T>

Унаследовано от

Collection#valueSeq()

entrySeq()

Возвращает новый Seq.Indexed кортежей [ключ, значение].

entrySeq(): Seq.Indexed<[number, T]>

Унаследовано от

Collection#entrySeq()

Побочные эффекты

forEach()

Метод sideEffect выполняется для каждой записи в коллекции.

forEach(sideEffect: (value: T, key: number, iter: this) => unknown,context?: unknown): number

Унаследовано от

Collection#forEach()

Обсуждение

В отличие от Array#forEach, если любой вызов sideEffect возвращает false, итерация прекратится. Возвращает количество обработанных записей (включая последнюю итерацию, которая вернула false).

Создание подмножеств

slice()

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

slice(begin?: number, end?: number): this

Унаследовано от

Collection#slice()

Обсуждение

Если begin имеет отрицательное значение, оно вычитается из конца коллекции. Например, slice(-2) возвращает коллекцию из двух последних записей. Если begin не указано, новая коллекция начнется с начала этой коллекции.

Если end имеет отрицательное значение, оно вычитается из конца коллекции. Например, slice(0, -1) возвращает коллекцию, исключая последнюю запись. Если end не указано, новая коллекция будет продолжаться до конца этой коллекции.

Если запрашиваемый срез эквивалентен текущей коллекции, то возвращается она сама.

rest()

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

rest(): this

Унаследовано от

Collection#rest()

butLast()

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

butLast(): this

Унаследовано от

Collection#butLast()

skip()

Возвращает новую коллекцию того же типа, исключая первые amount записи из этой коллекции.

skip(amount: number): this

Унаследовано от

Collection#skip()

skipLast()

Возвращает новую коллекцию того же типа, исключая последние amount записи из этой коллекции.

skipLast(amount: number): this

Унаследовано от

Collection#skipLast()

skipWhile()

Возвращает новую коллекцию того же типа, содержащую записи, начиная с момента, когда predicate впервые возвращает false.

skipWhile(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): this

Унаследовано от

Collection#skipWhile()

Обсуждение

const { List } = require('immutable')
List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
  .skipWhile(x => x.match(/g/))
// List [ "cat", "hat", "god" ]run it

skipUntil()

Возвращает новую коллекцию того же типа, содержащую записи, начиная с момента, когда predicate впервые возвращает true.

skipUntil(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): this

Унаследовано от

Collection#skipUntil()

Обсуждение

const { List } = require('immutable')
List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
  .skipUntil(x => x.match(/hat/))
// List [ "hat", "god" ]run it

take()

Возвращает новую коллекцию того же типа, содержащую первые amount записи из этой коллекции.

take(amount: number): this

Унаследовано от

Collection#take()

takeLast()

Возвращает новую коллекцию того же типа, содержащую последние amount записи из этой коллекции.

takeLast(amount: number): this

Унаследовано от

Collection#takeLast()

takeWhile()

Возвращает новую коллекцию того же типа, содержащую записи из этой коллекции, пока predicate возвращает true.

takeWhile(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): this

Унаследовано от

Collection#takeWhile()

Обсуждение

const { List } = require('immutable')
List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
  .takeWhile(x => x.match(/o/))
// List [ "dog", "frog" ]run it

takeUntil()

Возвращает новую коллекцию того же типа, содержащую записи из этой коллекции, пока predicate возвращает false.

takeUntil(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): this

Унаследовано от

Collection#takeUntil()

Обсуждение

const { List } = require('immutable')
List([ 'dog', 'frog', 'cat', 'hat', 'god' ])
  .takeUntil(x => x.match(/at/))
// List [ "dog", "frog" ]run it

Сведение к значению

reduce()

reduce<R>(reducer: (reduction: R, value: T, key: number, iter: this) => R,initialReduction: R,context?: unknown): R
reduce<R>(reducer: (reduction: T | R, value: T, key: number, iter: this) => R): R

Унаследовано от

Collection#reduce()

reduceRight()

reduceRight<R>(reducer: (reduction: R, value: T, key: number, iter: this) => R,initialReduction: R,context?: unknown): R
reduceRight<R>(reducer: (reduction: T | R, value: T, key: number, iter: this) => R): R

Унаследовано от

Collection#reduceRight()

every()

True, если predicate возвращает true для всех записей в коллекции.

every(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): boolean

Унаследовано от

Collection#every()

some()

True, если predicate возвращает true для любой записи в коллекции.

some(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): boolean

Унаследовано от

Collection#some()

join()

Объединяет значения в строку, вставляя разделитель между каждым. По умолчанию разделитель — ",".

join(separator?: string): string

Унаследовано от

Collection#join()

isEmpty()

Возвращает true, если эта коллекция не содержит значений.

isEmpty(): boolean

Унаследовано от

Collection#isEmpty()

Обсуждение

Для некоторых ленивых Seq, isEmpty может потребоваться выполнить итерацию для определения пустоты. Будет выполнена не более одной итерации.

count()

count(): number
count(predicate: (value: T, key: number, iter: this) => boolean,context?: unknown): number

Унаследовано от

Collection#count()

countBy()

Возвращает Seq.Keyed подсчетов, сгруппированных по возвращаемому значению функции grouper.

countBy<G>(grouper: (value: T, key: number, iter: this) => G,context?: unknown): Map<G, number>

Унаследовано от

Collection#countBy()

Обсуждение

Примечание: Это не ленивая операция.

Сравнение

isSubset()

True, если iter содержит каждое значение из этой коллекции.

isSubset(iter: Iterable<T>): boolean

Унаследовано от

Collection#isSubset()

isSuperset()

True, если эта коллекция содержит каждое значение из iter.

isSuperset(iter: Iterable<T>): boolean

Унаследовано от

Collection#isSuperset()
This documentation is generated from immutable.d.ts. Pull requests and Issues welcome.

© 2014–present, Lee Byron and other contributors
Licensed under the 3-clause BSD License.
https://immutable-js.com/docs/v4.2.1/List/

Spec-Zone.ru

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