非常教程

Immutable 3.8.1参考手册

fromJS()

fromJS()

将纯 JS 对象和数组深层转换为不可变映射和列表。

fromJS(json: any, reviver?: (k: any, v: Iterable<any, any>) => any): any

讨论

如果可选地提供了reviver ,那么每个集合都会被调用为 Seq(从最嵌套的集合开始并继续到顶层集合本身),以及引用每个集合的键以及提供的父 JS 对象this。对于最高级别的对象,关键会是""。这个reviver预计这会返回一个新的不可变的可重用对象,允许从深层 JS 对象进行自定义转换。

此示例将 JSON 转换为 List 和 OrderedMap:

Immutable.fromJS({a: {b: [10, 20, 30]}, c: 40}, function (key, value) {
  var isIndexed = Immutable.Iterable.isIndexed(value);
  return isIndexed ? value.toList() : value.toOrderedMap();
});

// true, "b", {b: [10, 20, 30]}
// false, "a", {a: {b: [10, 20, 30]}, c: 40}
// false, "", {"": {a: {b: [10, 20, 30]}, c: 40}}

如果没有提供reviver,默认行为会将数组转换为列表和对象到地图中。

reviver起到类似于相同的参数在JSON.parse

Immutable.fromJS在转换中保守。它只会转换传递Array.isArray给 List 的数组,并且只将原始对象(没有自定义原型)转换为 Map。

请记住,使用 JS 对象构建 Immutable Maps 时,JavaScript Object 属性始终是字符串,即使以不含引号的简写形式书写,而 Immutable Maps 也会接受任何类型的键。

var obj = { 1: "one" };
Object.keys(obj); // [ "1" ]
obj["1"]; // "one"
obj[1];   // "one"

var map = Map(obj);
map.get("1"); // "one"
map.get(1);   // undefined

JavaScript 对象的属性访问首先将该键转换为一个字符串,但由于 Immutable Map 键的类型可以是任何类型,所以该参数get()不会被修改。

 "Using the reviver parameter"

fromJS()相关

Immutable 3.8.1

immutable 是 Facebook 开源的一个项目,用于实现 javascript 的数据不可变,解决引用带来的副作用。

主页 https://facebook.github.io/immutable-js/
源码 https://github.com/facebook/immutable-js
发布版本 3.8.1

Immutable 3.8.1目录

1.Collection
2.fromJS()
3.is()
4.Iterable
5.List
6.Map
7.OrderedMap
8.OrderedSet
9.Range()
10.记录 | Record
11.Repeat()
12.Seq
13.设定 | Set
14.堆 | Stack