Ramda 的一些API(一)

R.keys(object)

返回所提供object的所有自身的可枚举的属性名,注意在不同的js运行平台中,不能保证返回数组中元素的顺序

例如:R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']

R.values(object)

返回所提供object的所有自身的可枚举的属性值,注意在不同的js运行平台中,不能保证返回数组中元素的顺序

例如:R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3]

小结:这两个api的用法都是针对自身属性值来操作的,并且通过Object.getOwnPropertyDescriptor(object,property)获取到的enumerable是true的属性

 与之类似的还有keysIn和valuesIn,这两个还可以获取原型prototype上的属性名和属性值

R.addIndex

创建一个新的数组遍历方法,这个方法是以map遍历为基础,在后面又增加了两个参数,遍历每一项的系数,以及所有的数组。这种方式会使得R.map更贴近于Array.prototype.map。请注意,这个api仅仅当你传入了正确的参数后才能正常工作,即使有时候你不需要。

例如:

var mapIndexed = R.addIndex(R.map);

mapIndexed((val, idx) => idx + '-' + val, ['f', 'o', 'o', 'b', 'a', 'r']);

//=> ['0-f', '1-o', '2-o', '3-b', '4-a', '5-r']

R.adjust

应用在一个指定的需要计算的数组系数的方法中,返回一个新的数组,并且计算过的元素会在返回的数组中替换掉原来对应系数的元素。

R.adjust(R.add(10), 1, [1, 2, 3]); //=> [1, 12, 3]

R.adjust(R.add(10))(1)([1, 2, 3]); //=> [1, 12, 3]

R.mapAccum

这个方法很像是map和reduce的结合体,他也作用于集合中的每个元素,从左到右计算累积的参数,并且返回一个新的,包含所有计算后的值的集合。遍历方法额外接收来两个参数,累加规则和累加基数。

例如:

var digits = ['1', '2', '3', '4'];

var appender = (a, b) => [a + b, a + b];

R.mapAccum(appender, 0, digits);

//=> ['01234', ['01', '012', '0123', '01234']]

R.mapAccumRight

相当于mapAccum的计算顺序,改为从右到左

例如:

var digits = ['1', '2', '3', '4'];

var append = (a, b) => [a + b, a + b];

R.mapAccumRight(append, 5, digits);

//=> [['12345', '2345', '345', '45'], '12345']

R.add

计算两个数值的和

R.add(2,3) //5

R.add(2)(3) //5

R.take

 返回给定集合或字符串的前n个元素,参数的传递方式也可以,分开传递也是可以的

例如:

R.take(1, ['foo', 'bar', 'baz']); //=> ['foo']

R.take(2, ['foo', 'bar', 'baz']); //=> ['foo', 'bar']

R.take(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']

R.take(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz']

R.take(3, 'ramda'); //=> 'ram'

var personnel = [ 'Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan', 'Bob Bates', 'Joe Dodge', 'Ron Crotty' ];

var takeFive = R.take(5); takeFive(personnel);

//=> ['Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan']

R.all

依据指定规则,验证集合中的所有元素,全部匹配则返回true,否则返回false。如果存在第二个参数,则all方法会默认执行。

var equals3 = R.equals(3);

R.all(equals3)([3, 3, 3, 3]); //=> true

R.all(equals3)([3, 3, 1, 3]); //=> false

 

 

posted @ 2018-07-26 11:19  Dick_shi  阅读(344)  评论(0编辑  收藏  举报