美文网首页
mori.js 中文API(亲测)

mori.js 中文API(亲测)

作者: 前端那些事情 | 来源:发表于2017-08-07 11:10 被阅读37次

    这里不讲函数式的概念,因为既然你搜到这篇文章,你已经读了不少晦涩难懂的文字了。所以这里只会介绍mori.js 这个库的API

    mori的数据结构

    • 向量 Vector
      带有索引(index)的一组数据和js的array非常像,不过它是不可变和持久性的机构。
      创建的方法是:

        mori.vector(1,2,3,4)
        // =>[1,2,3,4]
      

      获取向量的元素

        let vec = mori.vector(1,2,3,4)
        mori.get(vec,0)
      

      添加向量的元素

        mori.conj(vec,5)  // =>[1,2,3,4,5]
        vec   //=>[1,2,3,4]
      

      删除向量的尾部元素

        mori.pop(vec)  // =>[1,2,3]
        vec   //=>[1,2,3,4]
      

      获取向量的首个和剩余元素

        mori.first(vec)    //=>  1
        mori.rest(vec)    //=>  ( 2 3 4 ) 注意这里是( )
      

      获取子向量(subvec)

        mori.subvec(vec,1)    //=>  [2 3 4 ]
        mori.subvec(vec,1,2)    //=>  [2]
        vec  // =>[1,2,3,4]
      

      FYI:向量的所有操作都是不可变的

    • Map
      这个是JS的语法:

        let map = new Map();
        map.set(0,'零');   // => Map {0=>'零'}
        map.set(1,'一');   // => Map {0=>'零',1=>'一'}
      

      我们可以使用mori.hashMap创建一个hashMap的实例,同样所有操作都不会改变原来的不可变对象

        let m = mori.hashMap('零',0,'一',1);   // =>{'零' 0, '一' 1}
        mori.get(m,'零')    // =>0
        let m1 = mori.assoc(m,mori.vector(1,2),2);  //更新操作
        // m1 =>{'零' 0, '一' 1,[1 2] 2}
        // m =>{'零' 0, '一' 1}
        mori.get(m1, mori.vector(1, 2))  // =>2
        mori.assoc(mori.vector(1, 2, 3), 1, 8);
        // => [1,8,3]
        mori.conj(m,mori.vector("foo","bar"));
        // => {'零' 0, '一' 1 , "foo" "bar"}
      

    函数组合子

    • filter
        mori.filter(mori.isEven,[1,2,3,4,5])
      
      Array也有filter方法
      [1,2,3,4,5].filter(x => x%2 == 0)
    • reduce
        mori.reduce( (a,b) => a+b,0, [ 1, 2, 3, 4,5])
        //  => 15
      
      第一个函数是规定参数,第二个是初始值,第三个集合

    mori.equals(x, y)

    判断两个参数的值是否相等。适用所有Mori的模型,进行深度对比。

    var l1 = mori.list(1,2,3);
    var l2 = mori.list(1,2,3);
    mori.equals(l1, l2); // => true
     
    var v = mori.vector(1,2,3);
    mori.equals(v, l1); // => true
     
    var m0 = mori.toClj({foo: 1});
    var m1 = mori.toClj({foo: 1});
    mori.equals(m0, m1); // => true
    

    mori.hash(x)

    把mori的对象Hash值化。说白了就是把mori的对象转为唯一Id

    var l = mori.list(1, 2, 3);
    var v = mori.vector(1, 2, 3);
     
    mori.hash(l) == mori.hash(v); // => true
    

    mori.isList(coll)

    判断是否是mori的List对象

    var l = mori.list(1, 2, 3);    
    console.log(mori.isList(l))//true
    

    mori.isSeq(coll)

    翻译来说是判断是否序列号。不过写Test.实在看不出有什么规律

    mori. isVector(coll)

    判断是否是mori的Vector对象

    var v = mori.vector(1, 2, 3);
    console.log('isVector'+mori.isVector(v))
    

    mori.isMap(coll)

    判断是否是mori的 Map对象

    var v = mori.hashMap(1, 2, 3);
    console.log('isVector'+mori.isMap(v))
    

    mori.isSet(coll)

    判断是否是mori的Set对象

    var s = mori.set(["bird", "cat", "dog"]);
    console.log('set'+mori.isSet(s))
    

    mori.isCollection(coll)

    判断是否是mori的对象,Set,Lists,Maps,Vectors都是Collection的对象

    var s = mori.set(["bird", "cat", "dog"]);
    console.log('set'+mori. isCollection(s))
    

    mori. isSequential(coll)

    判断是否是mori的对象,Set,Lists,Maps,Vectors都是Collection的对象

    var s = mori.set(["bird", "cat", "dog"]);
    console.log('set'+mori. isCollection(s))
    

    相关文章

      网友评论

          本文标题:mori.js 中文API(亲测)

          本文链接:https://www.haomeiwen.com/subject/awtblxtx.html