Rumah > hujung hadapan web > tutorial js > js数据结构类型扩展immutable-js的使用介绍(代码示例)

js数据结构类型扩展immutable-js的使用介绍(代码示例)

不言
Lepaskan: 2018-09-17 14:43:28
asal
2076 orang telah melayarinya

本篇文章给大家带来的内容是关于js数据结构类型扩展immutable-js的使用介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

相对 java、.net 之类的强类型语言,js 有一点很大的区别就是,数据结构只有 array 与 object,并且都是动态可变的,而 java 有 List, Set, Map 等数据结构。所以,为了能在 js 中也使用这些数据结构,immutable-js 就应运而生。

1. immutable-js

immutable-js 扩充了 JavaScript 中的不可变集合,即一旦创建就不能改变的数据类型。这样可简化应用开发、无防御复制、启用更先进的内存方案,以及使用更简单的逻辑检查更新。持久化数据提供可修改的 API,这些 API 不在原地更新数据,而是产生新的更新后的数据。

2. 提供的数据类型

1、List: 有序索引集合,类似 JavaScript 中的 Array

2、Map: 无序键值对((key, value) pairs)集合

3、OrderedMap: 有序的 Map

4、Set: 无重复值的集合

5、OrderedSet: 有序的 Set

6、Stack: 支持元素添加和移除的索引集合

7、Range(): 返回一个从 start 到 end,步长 step 填充的 Seq.Indexed 集合,start 默认值为 0,step 默认值为 1,end 默认为无穷大。如果 start = end,则返回空集合。

8、Repeat(): 返回一个用 value 重复 times 次的 Seq.Indexed 集合。如果 times 未定义,则返回无限 value 值的 Seq 集合。

9、Record: 类似于 JavaScript 的 Object,但是只接收特定字符串为 key,并有默认值

10、Seq: 允许不通过中间集合让高阶集合函数(如 map, filter)高效链式调用的惰性操作集合

11、Collection: 所有数据结构的基类

3. 提供的 API

3.1 fromJS: 将一个 js 数据转换为 immutable-js 类型的数据

const { fromJS, isKeyed } = require('immutable@4.0.0-rc.9');
fromJS({ a: {b: [10, 20, 30]}, c: 40}, function (key, value, path) {
  console.log(key, value, path)
  return isKeyed(value) ? value.toOrderedMap() : value.toList()
})

> "b", [ 10, 20, 30 ], [ "a", "b" ]
> "a", {b: [10, 20, 30]}, [ "a" ]
> "", {a: {b: [10, 20, 30]}, c: 40}, []
Salin selepas log masuk

3.2 is: 对两个对象进行比较

const { Map, is } = require('immutable@4.0.0-rc.9')
const map1 = Map({ a: 1, b: 1, c: 1 })
const map2 = Map({ a: 1, b: 1, c: 1 })
assert.equal(map1 !== map2, true)
assert.equal(Object.is(map1, map2), false)
assert.equal(is(map1, map2), true)
Salin selepas log masuk

Atas ialah kandungan terperinci js数据结构类型扩展immutable-js的使用介绍(代码示例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Isu terkini
Untuk apa node.js digunakan?
daripada 1970-01-01 08:00:00
0
0
0
Paparkan medan tertentu rekod (node.js+mongodb)
daripada 1970-01-01 08:00:00
0
0
0
node.js - masalah port 80 pelayan
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan