redux-immutable

1. Map

  • 当使用JS对象来创建不可变的Map时,尽管不可变数组允许任意类型值作为键,即使使用无引号缩写方式,js对象属性将会对待为字符串
const map1 = Map({
    1: "one"
})

console.log(map1.get("1"))
//one
console.log(map1.get(1))
// undefined

1.1 merge和mergeDeep
  • 浅合并,新数据与旧数据进行对比,旧数据中不存在的属性直接添加,旧数据中已存在的属性用新数据中的覆盖。
const map1 = new Map({
    a: 111,
    b: 222,
    c: {
        d: 333,
        e: 444,
        a: 5555
    },
    f: 666
})

const map2 = new Map({
    a: 111,
    b: 222,
    c: {
        e: 444,
        f: 555
    }
})

const map3 = map1.merge(map2)
console.log(map3.toJS())
// { a: 111, b: 222, c: { e: 444, f: 555 }, f: 666 },注意此处map2的c直接覆盖了map1的c。
const map4 = map1.mergeDeep(map2)
//{ a: 111, b: 222, c: { d: 333, e: 444, a: 5555, f: 555 }, f: 666 }
console.log(map4.toJS())
1.2 mergeWith
  • 自定义浅合并,可自行设置某些属性的值
const map1 = new Map({
    a: 111,
    b: 222,
    c: {
        d: 333,
        e: 444,
        a: 5555
    },
    f: 666
})

const map2 = new Map({
    a: 111,
    b: 222333,
    c: {
        e: 444,
        f: 555
    }
})

const map5 = map1.mergeWith((oldData,newData, key)=> {
    if(key === "a") {
        return oldData
    }
    return newData
},map2)
// { a: 111, b: 222333, c: { e: 444, f: 555 }, f: 666 } 1111
console.log(map5.toJS(), 1111)
  • 可以看到mergeWith,通过自定义的函数,当键为a的时候,用的是老数据,其他情况下用的是新数据。
1.3 mergeIn、mergeDeepIn
1.4 Map.isMap()
  • 提供的值为Map时返回true。
1.5 size
const map1 = Map({
    1: "one",
    y: {
        a: "@2"
    }
})
console.log(map1.size)
//2
1.6 set
  • 返回一个在原Map基础上包含了新的键值对的新Map。如果key在原函数中已经有相等的存在,那么他将会被替换。
1.7 delete
  • 返回一个新的不包含key的新Map。
delete(key: K): this
1.8 deleteAll
  • 返回一个不包含所有提供的key的新Map。
const map1 = Map({
    1: "one",
    y: {
        a: "@2"
    }
})

console.log(map1.deleteAll(["1", "y"]).toJS())
// {}
1.9 clear()
2.0 update
  • 更新,第二个参数是个function,同时返回一个新的Map。注意:原先的map不变
const map1 = Map({
    1: "one",
    y: {
        a: "@2"
    }
})
console.log(map1.update("1", item=> 456).toJS(), map1.toJS())
// { '1': 456, y: { a: '@2' } } { '1': 'one', y: { a: '@2' } }
2.1 deleteIn()
  • 返回一个移除了原MapkeyPath位置的新Map。如果keyPath处无值,那么将不会发生改变。
const map1 = Map({
    1: "one",
    y: {
        a: "@2"
    }
})

console.log(map1.deleteIn(["y", "a1"]).toJS())
// { '1': 'one', y: { a: '@2' } } 值没有发生改变
2.2 updateIn
2.3 concat
  • 合并两个map
const map1 = Map({
    1: "one",
    y: {
        a: "@2"
    }
})

const map2 = Map({
    name: "3"
})

console.log(map1.concat(map2).toJS())
// { '1': 'one', y: { a: '@2' }, name: '3' }
2.4 map
  • 遍历所有的值
2.5 mapEntries()
  • 遍历所有的key,value
map1.mapEntries(([key,value])=> {
    console.log(key,value, "item1111")
})
2.6 filter
const map1 = Map({
    1: "one",
    y: {
        a: "@2"
    }
})

map1.filter((item,key)=> {
    console.log(item,key, "item1111")
})
// one 1 item1111
// { a: '@2' } y item1111

2.7 groupBy()

const listOfMaps = List([
    Map({ v: 0 }),
    Map({ v: 1 }),
    Map({ v: 1 }),
    Map({ v: 0 }),
    Map({ v: 2 })
  ])

const groupOf = listOfMaps.groupBy(x=> x.get("v"))

console.log(groupOf.toJS())
//{
  '0': [ { v: 0 }, { v: 0 } ],
  '1': [ { v: 1 }, { v: 1 } ],
  '2': [ { v: 2 } ]
}
2.8 has()
has(key: number): boolean
2.9 includes
  • 判断values是否在collections
const map1 = Map({
    name: "222"
})

console.log(map1.includes("222"))
// true
2.9 first()
  • 取得集合第一个值
const map1 = Map({
    name: "222"
})

console.log(map1.first())
// 22
3.0 last()
  • 取得集合最后一个值。

3.1 getIn、hasIn

3.2 entries()
  • 一个关于Collection条目的迭代器,是[ key, value ]这样的元组数据。
for(let [key,values] of map1.entries()){
    console.log(key, values)
}
// name 222
//sex female
3.3 values()
  • 一个关于Collection值的迭代器。
for(let values of map1.values()){
    console.log(values)
}
// 222
// female
3.4 keys()
  • 一个关于Collection键的迭代器。
const map1 = Map({
    name: "222",
    sex: "female"
})

for(let keys of map1.keys()){
    console.log(keys)
}
// name
// sex
3.5 keySeq()
  • 返回一个只包含key的数组
3.6 valueSeq()
  • 返回一个只包含value的数组
3.7 entrySeq()
  • 返回一个新的Seq.Indexed,其为[key, value]这样的元组。
const map1 = Map({
    name: "222",
    sex: "female"
})

console.log(map1.entrySeq().toJS())
// [ [ 'name', '222' ], [ 'sex', 'female' ] ]

2. List

2.1 List.isList()
2.2 size
2.3 set
  • 返回一个在index位置处值为value的新List。如果index位置已经定义了值,它将会被替换。
2.4 delete
2.5 insert
2.6 clear
2.7 push
2.8 pop
2.9 unshift
3.0 shift
3.1 update
  • 将会返回一个新List,如果指定index位置在原List中存在,那么由所提供函数updater更新此位置值,否则该位置值设为所提供的notSetValue值。 如果只传入了一个参数updater,那么updater接受的参数为List本身。
const list1 = List([0])

console.log(list1.update(0, item=>2222).toJS())
// [2222]
3.2 merge、mergeWith、mergeDeep、mergIn、mergeDeepIn
3.3 setIn
3.4 deleteIn
  • 返回一个删除了由keyPath指定位置值的新List。如果指定位置无值,那么不会发生改变。
3.5 updateIn
3.6 cancat、 map、 filter、reverse、groupBy、get、includes、first
3.7 indexOf
  • 返回集合中最后一个与所提供的搜索值匹配的索引,无匹配值则返回-1。
3.8 findIndex()
3.9 find、findLast

3. is

  • 用于比较两个不可变数据是否相等,包括Map的键值对和Set的成员。
const map1 = Map({ a: 1, b: 1, c: 1 })
const map2 = Map({ a: 1, b: 1, c: 1 })
console.log(map1 !== map2)
console.log(Object.is(map1, map2) === false)
console.log(is(map1, map2) === true)

4. Set

4.1 isSet
4.2 Set.intersect()

使用与另一个Set共有值创建新的不可变Set。

const intersected = Set.intersect([
    Set(["a", "b", "c"]),
    Set(["a","c"])
])

console.log(intersected.toJS())
// ["a", "c"]
4.3 Set.union()
const union = Set.union([
    Set(["a", "b", "c"]),
    Set(["a","c"])
])

console.log(union.toJS())
// [ 'a', 'c', 'b' ]
4.4 size
4.5 add、delete、clear
const set = Set([1,233])
console.log(set.add(7777).toJS())
// [ 1, 233, 7777 ]
4.6 map、filter、groupBy、hashCode、get、has、includes、last、getIn、hasIn

5. Stack

5.1 size
5.2 peek
  • 弹出栈顶元素并返回
5.3 get、has、includes、first、 last、 clear
5.4 unshift、pop
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值