美文网首页
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