Javascript immutable.js:Map与Seq

Javascript immutable.js:Map与Seq,javascript,immutable.js,Javascript,Immutable.js,Immutable.js中的Map和Seq有什么区别?你能提供一个例子来说明两者的区别吗。不可变的映射是一个无序的Iterable.Keyed,由(键,值)对组成 // 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 n

Immutable.js中的Map和Seq有什么区别?你能提供一个例子来说明两者的区别吗。

不可变的
映射是一个无序的
Iterable.Keyed
,由
(键,值)
对组成

// 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()
等。它还可以转换为其他不可变的数据类型。你可以看到

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

类映射扩展集合。键入

而:

class Seq扩展了Iterable

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

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


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

不可变的
映射是一个无序的
Iterable.Keyed
,由
(键,值)
对组成

// 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()
等。它还可以转换为其他不可变的数据类型。你可以看到

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

类映射扩展集合。键入

而:

class Seq扩展了Iterable

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

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


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

Seq
还具有包装底层数据结构而不是创建HAMT的额外好处。HAMT虽然在发生突变(即共享数据)时非常有助于节省空间,但当您只想存储一些永远不会改变的数据时,它的性能会降低。因此,在这种情况下,在
映射上使用
Seq
还有一个额外的好处,即包装底层数据结构,而不是创建HAMT。HAMT虽然在发生突变(即共享数据)时非常有助于节省空间,但当您只想存储一些永远不会改变的数据时,它的性能会降低。因此,在这种情况下,使用
Seq
覆盖
Map