在Immutable.js中,Map和Seq有什么区别?你能提供一个例子来说明两者之间的区别吗?
发布于 2016-09-14 22:45:17
不可变的Map是由(key, value)对组成的无序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()等。它还可以转换成其他不可变的数据类型。你可以看到所有这些方法的文档。
不可变的Seq是一个可迭代的值序列,不需要有底层的数据结构。这是与Map的第一个主要区别,您可以在它们的定义中看到这一点:
class Map<K, V> extends Collection.Keyed<K, V>
同时:
class Seq<K, V> extends Iterable<K, V>
从入门开始,我们可以看到Seq没有键值,这与Map有很大的不同。另一个主要区别是不能从Seq结构中追加、更新或删除元素。
Seq是一种延迟的操作表示。您可以将其看作是一个非常轻的容器,包含以前的Iterable和一些要应用的操作(map、filter等),只有在需要时才会应用该操作来获得值。Seq本身不存储任何值。
因为Seq是轻量级的,所以它对于某些逻辑链来说是相当有性能的。文档还注意到,它通常用于向JavaScript对象提供丰富的集合API。
https://stackoverflow.com/questions/39489630
复制相似问题