zoukankan      html  css  js  c++  java
  • 深度浅出immutable.js

    这篇文章将讲述immutable.js的基本语法和用法。

    1.fromJs()  Deeply converts plain JS objects and arrays to Immutable Maps and Lists. 

    immutable.fromJs([1,2,3]) 相当于 immutable.List([1,2,3])  把一个js数组转化为immutable的形式

    查看list的大小  immutableA.size 或者  immutable.count()

    判断是否是list类型  immutable.List.isList(x)

    获取list的值   var qwe = immutable.fromJs([1,2,3]); var a = qwe.get(1);  得到的是2

    var asd = immutable.fromJs([1,2,[3,4,5]]);  var b = asd.get([2,1]);    我在终端上面试了几次总报错好烦呀 。。。

    继续对上面操作

    var qwe = asd.set 1, 1;

    var qwer = qwe.update 1,(x)=>x+1;

    var qwert = qwer.updateIn[2,1],(x)=>x+1;   这应该秒懂吧

    查找, find 返回第一个匹配值, filter 返回 List:

    immutable.find(() => x>1);

    immutable.filter(() => x>1);

    Map

    immutable.Map({a:1,b:2,c:3}); 或 immutable.fromJS({a:1,b:2,c:3});

    判断 Map 的写法和 List 判断类似:

    immutable.Map.isMap(x);

    获取map中的数据

    immutableObj.get('a');注意引号

    通过 getIn 访问嵌套的 Map 中的树上:

    immutable.getIn(['a','b']);

    immutable.set 'a',1;

    immutable.setIn ['a','b'],1;

    判断map中的key值是否存在   

    immutable.hasKey('a')  是否存在key为a

    immutable.filter((key,value)=>return value ==1) 

    获取key和value的数组形式

    immutable.keySeq()    immutable.valueSeq()

    下面看一下is比较与原生的区别

    var map1  =immutable.Map({a:1,b:2,c:3}); var map2 = immutable.Map({a:1,b:2,c:3});

    assert(map1 !== map2); assert(Object.is(map1,map2) === false); assert(immutable.is(map1,map2) === true); 

    这回看出来了吧  immutable.is 比较值

    ------------------------------------------

    var qq = immutable.List.of(1,2,3) 记住这种写法

    qq.set(-1,5);   index =-1 这是把最后一个改成5

    qq.delete(2); 删除index=2 的元素  This is synonymous with list.splice(index1).  是否想起了js数组

    qq.insert(1,3);  在index=1 插入一个元素  list.splice(index,0,value).

    clear()  用于清空list  其他的方法同js数组  pop  push等

    qq.update(0,5);  上面已经见过了  修改指定下标的值

    var list1 = Immutable.List.of(1,2);

    var list2 = list1.push(3,4,5);

    var list3 = list2.unshift(0);

    var list4 = list1.concat(list2,list3);

    assert(list4.size);   concat  也可用于连接list 

    ------------------------------------------

    merge用于融合

    var aa = immutable.map({a:1,b:2,c:3});

    var bb = immutable.map({b:3,d:5});

    aa.merge(bb);  {a:1,b:3,c:3,d:4}

    mergeWith 

    var x Immutable.Map({a10, b20, c30});

    var y = Immutable.Map({b: 40, a: 50, d: 60});

    x.mergeWith((prev, next) => prev / next, y) // { a: 0.2, b: 0.5, c: 30, d: 60 }

    y.mergeWith((prev, next) => prev / next, x) // { b: 2, a: 5, d: 60, c: 30 }  怎么养看出来了吧 

    来几个实例

    var qq = immutable.Map({a:1,b:2,c:3,d:4});

    qq.map((val,key)=>key.toUppercase()).join(",");  //A,B,C,D 

    var myobject = {a:1,b:2,c:3};

    Seq(myobject).map((x)=>x*x).toObject();   //{a:1,b:4,:9}

    var deep = immutable.Map({a:1,b:2,c:immutable.list.of(3,4,5)});

    deep.object() // {a:1,b:2,c:List[3,4,5]}  转化为对象

    deep.toArray() // [1,2,list[3,4,5]]  转化为数组

    json,stringfy(deep) // '{"a":1,"b":2,"c":[3,4,5]}'  转化为json

    大家 有空可以去查下merge和mergedeep的区别  

    --------------------------------------

    其实immutable.js 语法和原生js差异并不大  正是因为这样才不好学  很像但又有区别。。。。

    官方文档上的实力也是少得可怜  下面再写几个例子吧 

    var oddSquare = immutable.sequence.of(1,2,3,4,5,6,7);

    oddSquare.filter((x)=>x%2).map((x)=>x*x);

    console.log(oddsquare.get(1))  // 9

    这是个官方例子  我看英文半天才知道他想说的是什么  它是一个lazy-seq

    .get(1) -->得到数组下标1 -->需要filter 3次  但是map  就只有一次  

    Seq is immutable — Once a Seq is created, it cannot be changed, appended to, rearranged or otherwise modified.

    Instead, any mutative method called on a Seq will return a new Seq

    去百度下这是啥意思   对你很有帮助

    --------------------------------------

    再来看一个很有趣的例子

    immutable.range(1,infinity).skip(1000).map((n)=>-n).filter((n)=>n%2==0).take(2).reduce((a,b)=> return a*b,1);

    1到无穷大=》跳过1000个自然数 =》每个书换成负数 =》取能被2整除得 =》取前2个元素进行reduce   1*(-1002)*(-1004) =1006008

    下面

    Seq.of('dog','frog','cat','hat','god') .skipWhile(x => x.match(/g/)) // Seq [ 'cat', 'hat', 'god' ]  ??为什么自己思考

    Seq.of('dog','frog','cat','hat','god') .takeWhile(x => x.match(/o/)) // Seq [ 'dog', 'frog' ]

    好了  就这么关键是大家要保持学习的热情,自己主动去查看官方文档。。。

    
    
    
     
    
    
    
    
    
    
    
    
    
    

     

  • 相关阅读:
    “过程决定质量”论之证明
    益老而弥坚:软件开发哲学反思录
    TMS TDBPlanner的使用介绍
    混沌现象检测基础
    混沌现象简介
    如何学习软件工程
    阅读随想(2):《你的灯亮着吗?——发现问题的真正所在》
    阅读随想(1):《你的灯亮着吗?——发现问题的真正所在》
    my learning
    IBM Websphere Integration Developer 6.1
  • 原文地址:https://www.cnblogs.com/yoissee/p/6007251.html
Copyright © 2011-2022 走看看