Map
Неизменяемая Map — это неупорядоченная коллекция пар (ключ, значение) с O(log32 N) получением и O(log32 N) постоянными множествами.
type Map<K, V> extends Collection.Keyed<K, V>
Обсуждение
Порядок итерации в Map не определен, но стабилен. Несколько итераций одной и той же Map будут выполняться в одном и том же порядке.
Ключи Map могут быть любого типа и использовать Immutable.is для определения равенства ключей. Это позволяет использовать любое значение (включая NaN) в качестве ключа.
Поскольку Immutable.is возвращает равенство на основе семантики значений, и неизменяемые коллекции рассматриваются как значения, любая неизменяемая коллекция может использоваться в качестве ключа.
const { Map, List } = require('immutable');
Map().set(List([ 1 ]), 'listofone').get(List([ 1 ]));
// 'listofone'run it
Любой JavaScript-объект может использоваться в качестве ключа, однако для оценки равенства ключей используется строгое равенство. Два похожих объекта будут представлять два разных ключа.
Реализовано с помощью хэш-массива, сопоставленного с деревом.
Создание
Map()
Map<K, V>(collection?: Iterable<[K, V]>): Map<K, V>
Map<V>(obj: {[key: string]: V}): Map<string, V>
Map<K, V>(obj: {[key: string]: V}): Map<K, V>
Статические методы
Map.isMap()
Map.isMap(maybeMap: unknown): boolean
Члены
размер
Количество элементов в этой Map.
size: number
Постоянные изменения
set()
Возвращает новую Map, также содержащую новую пару ключ-значение. Если в этой Map уже существует эквивалентный ключ, он будет заменён.
set(key: K, value: V): this
Обсуждение
const { Map } = require('immutable')
const originalMap = Map()
const newerMap = originalMap.set('key', 'value')
const newestMap = newerMap.set('key', 'newer value')
originalMap
// Map {}
newerMap
// Map { "key": "value" }
newestMap
// Map { "key": "newer value" }run it
Примечание: set может использоваться в withMutations.
delete()
Возвращает новую Map, из которой исключён этот key.
delete(key: K): this
псевдоним
remove()Обсуждение
Примечание: delete не может безопасно использоваться в IE8, но предоставляется для соответствия API коллекций ES6.
const { Map } = require('immutable')
const originalMap = Map({
key: 'value',
otherKey: 'other value'
})
// Map { "key": "value", "otherKey": "other value" }
originalMap.delete('otherKey')
// Map { "key": "value" }run it
Примечание: delete можно использовать в withMutations.
deleteAll()
Возвращает новую Map, из которой исключены предоставленные keys.
deleteAll(keys: Iterable<K>): this
псевдоним
removeAll()Обсуждение
const { Map } = require('immutable')
const names = Map({ a: "Aaron", b: "Barry", c: "Connor" })
names.deleteAll([ 'a', 'c' ])
// Map { "b": "Barry" }run it
Примечание: deleteAll можно использовать в withMutations.
clear()
Возвращает новую Map, не содержащую ключей или значений.
clear(): this
Обсуждение
const { Map } = require('immutable')
Map({ key: 'value' }).clear()
// Map {}run it
Примечание: clear можно использовать в withMutations.
update()
update(key: K, notSetValue: V, updater: (value: V) => V): this update(key: K, updater: (value: V | undefined) => V): this update<R>(updater: (value: this) => R): R
Переопределения
Collection#update()
merge()
merge<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Map<K | KC, V | VC>
merge<C>(...collections: Array<{[key: string]: C}>): Map<K | string, V | C>
mergeWith()
Как и merge(), mergeWith() возвращает новую Map, полученную в результате слияния предоставленных коллекций (или JS-объектов) в эту Map, но использует функцию merger для обработки конфликтов.
mergeWith(merger: (oldVal: V, newVal: V, key: K) => V,...collections: Array<Iterable<[K, V]> | {[key: string]: V}>): this
Обсуждение
const { Map } = require('immutable')
const one = Map({ a: 10, b: 20, c: 30 })
const two = Map({ b: 40, a: 50, d: 60 })
one.mergeWith((oldVal, newVal) => oldVal / newVal, two)
// { "a": 0.2, "b": 0.5, "c": 30, "d": 60 }
two.mergeWith((oldVal, newVal) => oldVal / newVal, one)
// { "b": 2, "a": 5, "d": 60, "c": 30 }run it
Примечание: mergeWith можно использовать в withMutations.
mergeDeep()
Как merge(), но когда встречаются две совместимые коллекции с одинаковым ключом, они также объединяются, рекурсивно проходя по вложенным данным. Две коллекции считаются совместимыми (и, следовательно, будут объединены), если они обе относятся к одной из трёх категорий: с ключами (например, Mapы, Recordы и объекты), индексированные (например, Listы и массивы) или множества (например, Setы). Если они попадают в разные категории, mergeDeep заменит существующую коллекцию коллекцией, которая объединяется. Это поведение можно настроить, используя mergeDeepWith().
mergeDeep(...collections: Array<Iterable<[K, V]> | {[key: string]: V}>): this
Обсуждение
Примечание: Индексированные и множественные коллекции объединяются с использованием concat()/union() и поэтому не рекурсируют.
const { Map } = require('immutable')
const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
one.mergeDeep(two)
// Map {
// "a": Map { "x": 2, "y": 10 },
// "b": Map { "x": 20, "y": 5 },
// "c": Map { "z": 3 }
// }run it
Примечание: mergeDeep можно использовать в withMutations.
mergeDeepWith()
Как mergeDeep(), но когда встречаются два не-коллекции или несовместимые коллекции с одним и тем же ключом, она использует функцию merger для определения результирующего значения. Коллекции считаются несовместимыми, если они попадают в разные категории между с ключами, индексированными и множественными.
mergeDeepWith(merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown,...collections: Array<Iterable<[K, V]> | {[key: string]: V}>): this
Обсуждение
const { Map } = require('immutable')
const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
one.mergeDeepWith((oldVal, newVal) => oldVal / newVal, two)
// Map {
// "a": Map { "x": 5, "y": 10 },
// "b": Map { "x": 20, "y": 10 },
// "c": Map { "z": 3 }
// }run it
Примечание: mergeDeepWith можно использовать в withMutations.
Глубокие постоянные изменения
setIn()
Возвращает новую Map, установив value в этой keyPath. Если какие-либо ключи в keyPath не существуют, в этом ключе будет создана новая неизменяемая Map.
setIn(keyPath: Iterable<unknown>, value: unknown): this
Обсуждение
const { Map } = require('immutable')
const originalMap = Map({
subObject: Map({
subKey: 'subvalue',
subSubObject: Map({
subSubKey: 'subSubValue'
})
})
}) const newMap = originalMap.setIn(['subObject', 'subKey'], 'ha ha!') // Map { // "subObject": Map { // "subKey": "ha ha!", // "subSubObject": Map { "subSubKey": "subSubValue" } // } // } const newerMap = originalMap.setIn( ['subObject', 'subSubObject', 'subSubKey'], 'ha ha ha!' ) // Map { // "subObject": Map { // "subKey": "subvalue", // "subSubObject": Map { "subSubKey": "ha ha ha!" } // } // }Запустить
Простые JavaScript-объекты или массивы могут быть вложены в Immutable.js-коллекцию, и setIn() может обновлять эти значения, обрабатывая их неизменяемо, создавая новые копии этих значений с применёнными изменениями.
const { Map } = require('immutable')
const originalMap = Map({
subObject: {
subKey: 'subvalue',
subSubObject: {
subSubKey: 'subSubValue'
}
}
}) originalMap.setIn(['subObject', 'subKey'], 'ha ha!') // Map { // "subObject": { // subKey: "ha ha!", // subSubObject: { subSubKey: "subSubValue" } // } // }Запустить
Если какой-либо ключ в пути существует, но не может быть обновлён (такой как примитив, например, число, или пользовательский объект, например, Date), будет выброшено исключение.
Примечание: setIn можно использовать в withMutations.
deleteIn()
Возвращает новую Map, удалив значение по этому keyPath. Если какие-либо ключи в keyPath не существуют, изменений не произойдёт.
deleteIn(keyPath: Iterable<unknown>): this
псевдоним
removeIn()Обсуждение
Примечание: deleteIn можно использовать в withMutations.
updateIn()
updateIn(keyPath: Iterable<unknown>,notSetValue: unknown,updater: (value: unknown) => unknown): this updateIn(keyPath: Iterable<unknown>, updater: (value: unknown) => unknown): this
mergeIn()
Комбинация updateIn и merge, возвращающая новую Map, но выполняющая слияние в точке, достигнутой путём следования по пути ключа. Другими словами, эти две строки эквивалентны:
mergeIn(keyPath: Iterable<unknown>, ...collections: Array<unknown>): this
Обсуждение
map.updateIn(['a', 'b', 'c'], abc => abc.merge(y)) map.mergeIn(['a', 'b', 'c'], y)
Примечание: mergeIn можно использовать в withMutations.
mergeDeepIn()
Комбинация updateIn и mergeDeep, возвращающая новую Map, но выполняющая глубокое слияние в точке, достигнутой путём следования по пути ключа. Другими словами, эти две строки эквивалентны:
mergeDeepIn(keyPath: Iterable<unknown>, ...collections: Array<unknown>): this
Обсуждение
map.updateIn(['a', 'b', 'c'], abc => abc.mergeDeep(y)) map.mergeDeepIn(['a', 'b', 'c'], y)
Примечание: mergeDeepIn можно использовать в withMutations.
Временные изменения
withMutations()
Каждый раз, когда вы вызываете одну из вышеперечисленных функций, создаётся новая неизменяемая Map. Если чистая функция вызывает несколько из этих функций для получения конечного возвращаемого значения, то была заплачена плата за производительность и память путём создания всех промежуточных неизменяемых Map.
withMutations(mutator: (mutable: this) => unknown): this
Обсуждение
Если вам нужно применить серию мутаций для создания новой неизменяемой Map, withMutations() создаёт временную изменяемую копию Map, которая может применять мутации высокопроизводительным способом. Фактически, именно так выполняются сложные мутации, такие как merge.
Например, это приводит к созданию 2, а не 4, новых Map:
const { Map } = require('immutable')
const map1 = Map()
const map2 = map1.withMutations(map => {
map.set('a', 1).set('b', 2).set('c', 3)
})
assert.equal(map1.size, 0)
assert.equal(map2.size, 3)run it
Примечание: не все методы могут быть использованы для изменяемой коллекции или внутри withMutations! Прочитайте документацию для каждого метода, чтобы узнать, безопасно ли его использовать в withMutations.
asMutable()
Ещё один способ избежать создания промежуточных неизменяемых map — создать изменяемую копию этой коллекции. Изменяемые копии всегда возвращают this, и поэтому не должны использоваться для равенства. Ваша функция никогда не должна возвращать изменяемую копию коллекции, используйте её только внутри для создания новой коллекции.
asMutable(): this
см.
Обсуждение
Если это возможно, используйте withMutations для работы с временными изменяемыми копиями, так как он предоставляет более удобный API и учитывает многие общие оптимизации.
Примечание: если коллекция уже изменяемая, asMutable возвращает себя.
Примечание: не все методы могут быть использованы для изменяемой коллекции или внутри withMutations! Прочитайте документацию для каждого метода, чтобы узнать, безопасно ли его использовать в withMutations.
wasAltered()
Возвращает true, если это изменяемая копия (см. asMutable()) и были применены изменяющие изменения.
wasAltered(): boolean
см.
asImmutable()
Противоположность asMutable's yang. Поскольку она применяется к изменяемым коллекциям, эта операция является изменяемой и может вернуть себя (хотя может не вернуть себя, например, если результатом является пустая коллекция). После выполнения исходная изменяемая копия больше не должна изменяться, так как она может быть неизменяемым результатом.
asImmutable(): this
см.
Обсуждение
Если это возможно, используйте withMutations для работы с временными изменяемыми копиями, так как это предоставляет более удобный API и учитывает много общих оптимизаций.
Алгоритмы последовательностей
map()
Возвращает новую Map со значениями, прошедшими через функцию mapper.
map<M>(mapper: (value: V, key: K, iter: this) => M,context?: unknown): Map<K, M>
Переопределяет
Collection.Keyed#map()Пример
Map({ a: 1, b: 2 }).map(x => 10 * x)
// Map { a: 10, b: 20 }mapKeys()
mapKeys<M>(mapper: (key: K, value: V, iter: this) => M,context?: unknown): Map<M, V>
Переопределяет
Collection.Keyed#mapKeys()см.
Collection.Keyed.mapKeys
mapEntries()
mapEntries<KM, VM>(mapper: (entry: [K, V], index: number, iter: this) => [KM, VM] | undefined,context?: unknown): Map<KM, VM>
Переопределяет
Collection.Keyed#mapEntries()см.
Collection.Keyed.mapEntries
flatMap()
Применяет flat-map к Map, возвращая новую Map.
flatMap<KM, VM>(mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,context?: unknown): Map<KM, VM>
Переопределяет
Collection.Keyed#flatMap()Обсуждение
Аналогично data.map(...).flatten(true).
filter()
filter<F>(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): Map<K, F> filter(predicate: (value: V, key: K, iter: this) => unknown,context?: unknown): this
Переопределяет
Collection.Keyed#filter()
partition()
partition<F, C>(predicate: (this: C, value: V, key: K, iter: this) => boolean,context?: C): [Map<K, V>, Map<K, F>] partition<C>(predicate: (this: C, value: V, key: K, iter: this) => unknown,context?: C): [this, this]
Переопределяет
Collection.Keyed#partition()
filterNot()
Возвращает новую коллекцию того же типа с записями, для которых функция predicate возвращает false.
filterNot(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): this
Унаследовано от
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
Унаследовано от
Collection#reverse()
sort()
Возвращает новую коллекцию того же типа, содержащую те же записи, устойчиво отсортированные с использованием comparator.
sort(comparator?: (valueA: V, valueB: V) => number): this
Унаследовано от
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: V, key: K, iter: this) => C,comparator?: (valueA: C, valueB: C) => number): this
Унаследовано от
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: V, key: K, iter: this) => G,context?: unknown): Seq.Keyed<G, Collection<K, V>>
Унаследовано от
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(): {[key: string]: DeepCopy<V>}
Унаследовано от
Collection.Keyed#toJS()Обсуждение
Преобразует ключи в строки.
toJSON()
Поверхностно преобразует эту ключевую коллекцию в эквивалентный родной JavaScript объект.
toJSON(): {[key: string]: V}
Унаследовано от
Collection.Keyed#toJSON()Обсуждение
Преобразует ключи в строки.
toArray()
Поверхностно преобразует эту коллекцию в массив.
toArray(): Array<[K, V]>
Унаследовано от
Collection.Keyed#toArray()
toObject()
Поверхностно преобразует эту коллекцию в объект.
toObject(): {[key: string]: V}
Унаследовано от
Collection#toObject()Обсуждение
Преобразует ключи в строки.
Преобразование в Seq
toKeyedSeq()
Возвращает Seq.Keyed из этой коллекции, где индексы рассматриваются как ключи.
toKeyedSeq(): Seq.Keyed<K, V>
Унаследовано от
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<V>
Унаследовано от
Collection#toIndexedSeq()
toSetSeq()
Возвращает Seq.Set значений этой коллекции, отбрасывая ключи.
toSetSeq(): Seq.Set<V>
Унаследовано от
Collection#toSetSeq()
Функции последовательностей
concat()
concat<KC, VC>(...collections: Array<Iterable<[KC, VC]>>): Collection.Keyed<K | KC, V | VC>
concat<C>(...collections: Array<{[key: string]: C}>): Collection.Keyed<K | string, V | C>
Унаследовано от
Collection.Keyed#concat()
Равенство значений
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
Если у двух значений одинаковый хеш-код, они не гарантированно равны. Если у двух значений разные хеш-коды, они не могут быть равны.
Чтение значений
get()
get<NSV>(key: K, notSetValue: NSV): V | NSV get(key: K): V | undefined
Унаследовано от
Collection#get()
has()
True, если ключ существует в этой Collection, используя Immutable.is для определения равенства.
has(key: K): boolean
Унаследовано от
Collection#has()
includes()
True, если значение существует в этой Collection, используя Immutable.is для определения равенства.
includes(value: V): boolean
Унаследовано от
Collection#includes()псевдоним
contains()
first()
В случае, если Collection не пуста, возвращает первый элемент Collection. В случае, если Collection пуста, возвращает необязательное значение по умолчанию, если оно предоставлено; если значение по умолчанию не предоставлено, возвращает undefined.
first<NSV>(notSetValue?: NSV): V | NSV
Унаследовано от
Collection#first()
last()
В случае, если Collection не пуста, возвращает последний элемент Collection. В случае, если Collection пуста, возвращает необязательное значение по умолчанию, если оно предоставлено; если значение по умолчанию не предоставлено, возвращает undefined.
last<NSV>(notSetValue?: NSV): V | NSV
Унаследовано от
Collection#last()
Чтение глубоких значений
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()
Преобразует эту коллекцию в Map. Бросает исключение, если ключи не хешируемы.
toMap(): Map<K, V>
Унаследовано от
Collection#toMap()Обсуждение
Примечание: Это эквивалентно Map(this.toKeyedSeq()), но предоставлено для удобства и для поддержки цепочек выражений.
toOrderedMap()
Преобразует это множество в карту, сохраняя порядок итерации.
toOrderedMap(): OrderedMap<K, V>
Унаследовано от
Collection#toOrderedMap()Обсуждение
Примечание: Это эквивалентно OrderedMap(this.toKeyedSeq()), но предоставлено для удобства и для возможности цепочных выражений.
toSet()
Преобразует это множество в множество, отбрасывая ключи. Бросает исключение, если значения не являются хешируемыми.
toSet(): Set<V>
Унаследовано от
Collection#toSet()Обсуждение
Примечание: Это эквивалентно Set(this), но предоставлено для возможности цепочных выражений.
toOrderedSet()
Преобразует это множество в множество, сохраняя порядок итерации и отбрасывая ключи.
toOrderedSet(): OrderedSet<V>
Унаследовано от
Collection#toOrderedSet()Обсуждение
Примечание: Это эквивалентно OrderedSet(this.valueSeq()), но предоставлено для удобства и для возможности цепочных выражений.
toList()
Преобразует это множество в список, отбрасывая ключи.
toList(): List<V>
Унаследовано от
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<V>
Унаследовано от
Collection#toStack()Обсуждение
Примечание: Это эквивалентно Stack(this), но предоставлено для возможности цепочных выражений.
Итераторы
keys()
Итератор ключей этого Collection.
keys(): IterableIterator<K>
Унаследовано от
Collection#keys()Обсуждение
Примечание: это вернёт итератор ES6, который не поддерживает алгоритмы последовательностей Immutable.js. Используйте keySeq вместо этого, если это нужно.
values()
Итератор значений этого Collection.
values(): IterableIterator<V>
Унаследовано от
Collection#values()Обсуждение
Примечание: это вернёт итератор ES6, который не поддерживает алгоритмы последовательностей Immutable.js. Используйте valueSeq вместо этого, если это нужно.
entries()
Итератор пар [ключ, значение] этого Collection в виде кортежей [ key, value ].
entries(): IterableIterator<[K, V]>
Унаследовано от
Collection#entries()Обсуждение
Примечание: это вернёт итератор ES6, который не поддерживает алгоритмы последовательностей Immutable.js. Используйте entrySeq вместо этого, если это нужно.
Коллекции (Seq)
keySeq()
Возвращает новый Seq.Indexed ключей этой коллекции, отбрасывая значения.
keySeq(): Seq.Indexed<K>
Унаследовано от
Collection#keySeq()
valueSeq()
Возвращает Seq.Indexed значений этой коллекции, отбрасывая ключи.
valueSeq(): Seq.Indexed<V>
Унаследовано от
Collection#valueSeq()
entrySeq()
Возвращает новый Seq.Indexed кортежей [ключ, значение].
entrySeq(): Seq.Indexed<[K, V]>
Унаследовано от
Collection#entrySeq()
Побочные эффекты
forEach()
Функция sideEffect выполняется для каждой записи в коллекции.
forEach(sideEffect: (value: V, key: K, 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) возвращает коллекцию из двух последних записей. Если он не задан, новая коллекция начнётся с начала этой коллекции.
Если end отрицательный, он отсчитывается от конца коллекции. Например, slice(0, -1) возвращает коллекцию, исключая последнюю запись. Если он не задан, новая коллекция будет продолжаться до конца этой коллекции.
Если запрашиваемый срез эквивалентен текущей коллекции, возвращается она сама.
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: V, key: K, 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: V, key: K, 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: V, key: K, 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: V, key: K, 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 Комбинирование
flatten()
flatten(depth?: number): Collection<unknown, unknown> flatten(shallow?: boolean): Collection<unknown, unknown>
Унаследовано от
Collection#flatten()
Сведение значения
reduce()
reduce<R>(reducer: (reduction: R, value: V, key: K, iter: this) => R,initialReduction: R,context?: unknown): R reduce<R>(reducer: (reduction: V | R, value: V, key: K, iter: this) => R): R
Унаследовано от
Collection#reduce()
reduceRight()
reduceRight<R>(reducer: (reduction: R, value: V, key: K, iter: this) => R,initialReduction: R,context?: unknown): R reduceRight<R>(reducer: (reduction: V | R, value: V, key: K, iter: this) => R): R
Унаследовано от
Collection#reduceRight()
every()
True, если predicate возвращает true для всех записей в коллекции.
every(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): boolean
Унаследовано от
Collection#every()
some()
True, если predicate возвращает true для любой записи в коллекции.
some(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): boolean
Унаследовано от
Collection#some()
join()
Объединяет значения в строку, вставляя разделитель между каждым. По умолчанию разделитель — ",".
join(separator?: string): string
Унаследовано от
Collection#join()
isEmpty()
Возвращает true, если эта коллекция не содержит значений.
isEmpty(): boolean
Унаследовано от
Collection#isEmpty()Обсуждение
count()
count(): number count(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): number
Унаследовано от
Collection#count()
countBy()
Возвращает карту подсчётов, сгруппированных по результату функции grouper.
countBy<G>(grouper: (value: V, key: K, iter: this) => G,context?: unknown): Map<G, number>
Унаследовано от
Collection#countBy()Обсуждение
Примечание: Это не ленивая операция.
Поиск значения
find()
Возвращает первое значение, для которого predicate возвращает true.
find(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown,notSetValue?: V): V | undefined
Унаследовано от
Collection#find()
findLast()
Возвращает последнее значение, для которого predicate возвращает true.
findLast(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown,notSetValue?: V): V | undefined
Унаследовано от
Collection#findLast()Обсуждение
Примечание: predicate будет вызываться для каждой записи в обратном порядке.
findEntry()
Возвращает первую пару [ключ, значение], для которой predicate возвращает true.
findEntry(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown,notSetValue?: V): [K, V] | undefined
Унаследовано от
Collection#findEntry()
findLastEntry()
Возвращает последнюю пару [ключ, значение], для которой predicate возвращает true.
findLastEntry(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown,notSetValue?: V): [K, V] | undefined
Унаследовано от
Collection#findLastEntry()Обсуждение
Примечание: predicate будет вызываться для каждой записи в обратном порядке.
findKey()
Возвращает ключ, для которого predicate возвращает true.
findKey(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): K | undefined
Унаследовано от
Collection#findKey()
findLastKey()
Возвращает последний ключ, для которого predicate возвращает true.
findLastKey(predicate: (value: V, key: K, iter: this) => boolean,context?: unknown): K | undefined
Унаследовано от
Collection#findLastKey()Обсуждение
Примечание: predicate будет вызываться для каждой записи в обратном порядке.
keyOf()
Возвращает ключ, связанный со значением поиска, или undefined.
keyOf(searchValue: V): K | undefined
Унаследовано от
Collection#keyOf()
lastKeyOf()
Возвращает последний ключ, связанный со значением поиска, или undefined.
lastKeyOf(searchValue: V): K | undefined
Унаследовано от
Collection#lastKeyOf()
max()
Возвращает максимальное значение в этом наборе. Если какие-либо значения сравнимы, будет возвращено первое найденное.
max(comparator?: (valueA: V, valueB: V) => number): V | undefined
Унаследовано от
Collection#max()Обсуждение
Функция comparator используется так же, как и Collection#sort. Если она не указана, используется по умолчанию сравнение >.
Если два значения считаются эквивалентными, будет возвращено первое встретившееся. В противном случае, max будет работать независимо от порядка ввода, если компаратор является коммутативным. Компаратор по умолчанию > коммутативен только тогда, когда типы не отличаются.
Если comparator возвращает 0, и любое из значений NaN, undefined или null, то будет возвращено это значение.
maxBy()
Подобно max, но также принимает comparatorValueMapper, что позволяет сравнивать более сложными способами:
maxBy<C>(comparatorValueMapper: (value: V, key: K, iter: this) => C,comparator?: (valueA: C, valueB: C) => number): V | 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: V, valueB: V) => number): V | undefined
Унаследовано от
Collection#min()Обсуждение
Функция comparator используется так же, как и Collection#sort. Если она не указана, используется по умолчанию сравнение <.
Если два значения считаются эквивалентными, будет возвращено первое встретившееся. В противном случае, min будет работать независимо от порядка ввода, если компаратор является коммутативным. Компаратор по умолчанию < коммутативен только тогда, когда типы не отличаются.
Если comparator возвращает 0, и любое из значений NaN, undefined или null, то будет возвращено это значение.
minBy()
Подобно min, но также принимает comparatorValueMapper, что позволяет сравнивать более сложными способами:
minBy<C>(comparatorValueMapper: (value: V, key: K, iter: this) => C,comparator?: (valueA: C, valueB: C) => number): V | 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 Сравнение
isSubset()
True, если iter содержит все значения в этом наборе.
isSubset(iter: Iterable<V>): boolean
Унаследовано от
Collection#isSubset()
isSuperset()
True, если этот набор содержит все значения в iter.
isSuperset(iter: Iterable<V>): boolean
Унаследовано от
Collection#isSuperset()
© 2014–present, Lee Byron and other contributors
Licensed under the 3-clause BSD License.
https://immutable-js.com/docs/v4.2.1/Map/