immutable.js:Map与Seq

时间:2016-09-14 11:46:10

标签: javascript immutable.js

Immutable.js中Map和Seq之间的区别是什么?能否请您举例说明两者之间的区别。

1 个答案:

答案 0 :(得分:2)

不可变的Map是一个无序的Iterable.Keyed,由(key, value)对组成。

// create a Map()
const map = Map({a: 1, b: 'Hello'});
// get a value for a specific key
console.log(map.get('b'));
> "Hello"
// set a new value and assign it to a new Map()
const newMap = map.set('c', 'This is a new key/value pair');
console.log(newMap.get('c'));
> "This is a new key/value pair"

它可以访问各种方法,例如setIn()deleteIn()merge()map()等。它也可以转换为其他不可变数据类型。您可以看到the docs about all of these methods.

Immutable的Seq是一个可迭代的值序列,不需要具有底层数据结构。这是与Map的第一个主要区别,您可以在其定义中看到这一点:

class Map<K, V> extends Collection.Keyed<K, V>

while:

class Seq<K, V> extends Iterable<K, V>

从一开始我们就可以看到Seq没有键控值,与Map有很大不同。另一个主要区别是您无法追加,更新或删除Seq结构中的元素。

In addition, to quote Lee Byron:

  

Seq是一个惰性操作表示。您可以将其视为前一个Iterable的一个非常轻量级的容器和一些应用的操作(映射,过滤等),该操作仅在必要时才应用于获取值。 Seq本身并不存储任何值。

因为Seq是轻量级的,所以对某些逻辑链来说可能相当高效。文档还指出,它通常用于为JavaScript Object提供丰富的集合API。