kk常用ramda函数总结

WEB前端 waitig 426℃ 百度已收录 0评论

持续更新。。。

参考了ramda官网和阮一峰老师的Ramda 函数库参考教程。

equals:比较两个值是否相等(支持对象的比较)

R.equals(1, 1); //=> true
R.equals(1, '1'); //=> false
R.equals([1, 2, 3], [1, 2, 3]); //=> true

var a = {}; a.v = a;
var b = {}; b.v = b;
R.equals(a, b); //=> true

either:接受两个函数作为参数,只要有一个返回true,就返回true,否则返回false。相当于||运算。

var gt10 = x => x > 10;
var even = x => x % 2 === 0;
var f = R.either(gt10, even);
f(101); //=> true
f(8); //=> true

both:接受两个函数作为参数,只有它们都返回true,才返回true,否则返回false,相当于&&运算。

var gt10 = R.gt(R.__, 10)
var lt20 = R.lt(R.__, 20)
var f = R.both(gt10, lt20);
f(15); //=> true
f(30); //=> false

allPass:接受一个函数数组作为参数,只有它们都返回true,才返回true,否则返回false。

var isQueen = R.propEq('rank', 'Q');
var isSpade = R.propEq('suit', '♠︎');
var isQueenOfSpades = R.allPass([isQueen, isSpade]);

isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false
isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true

test:判断一个字符串是否匹配给定的正则表达式。

R.test(/^x/, 'xyz'); //=> true
R.test(/^y/, 'xyz'); //=> false

数组

contains:如果包含某个成员,返回true(类似于es6中的Array.includes)。

all:所有成员都满足指定函数时,返回true,否则返回false(类似于es5的Array.every)。

any:只要有一个成员满足条件,返回true(类似于es5中的some)。

none:没有成员满足时,返回true。

head:返回数组或者字符串的第一个成员,空数组会返回undefined。

R.head(['fi', 'fo', 'fum']); //=> 'fi'
R.head([]); //=> undefined

R.head('abc'); //=> 'a'
R.head(''); //=> ''

last

filter:过滤出符合条件的成员(类似于es5的Array.filter)。

without:返回指定值以外的成员。

R.without([1, 2])([1, 2, 1, 3, 4])
//=> [3, 4]

sortWith:按照给定的一组函数,进行多重排序。

var alice = {
  name: 'alice',
  age: 40
};
var bob = {
  name: 'bob',
  age: 30
};
var clara = {
  name: 'clara',
  age: 40
};
var people = [clara, bob, alice];
var ageNameSort = R.sortWith([
  R.descend(R.prop('age')),
  R.ascend(R.prop('name'))
]);
ageNameSort(people); //=> [alice, clara, bob]

groupBy:Splits a list into sub-lists stored in an object, based on the result of calling a String-returning function on each element, and grouping the results according to values returned.

把一个数组按照函数返回的结果分成多个数组存在一个对象中,该函数返回值为字符串。

var byGrade = R.groupBy(function(student) {
  var score = student.score;
  return score < 65 ? 'F' :
         score < 70 ? 'D' :
         score < 80 ? 'C' :
         score < 90 ? 'B' : 'A';
});
var students = [{name: 'Abby', score: 84},
                {name: 'Eddy', score: 58},
                // ...
                {name: 'Jack', score: 69}];
byGrade(students);
// {
//   'A': [{name: 'Dianne', score: 99}],
//   'B': [{name: 'Abby', score: 84}]
//   // ...,
//   'F': [{name: 'Eddy', score: 58}]
// }

zip:将两个数组指定位置的成员放在一起,生成一个新数组。

R.zip([1, 2, 3])(['a', 'b', 'c'])
//=> [[1, 'a'], [2, 'b'], [3, 'c']]

zipObj:将两个数组指定位置的成员分别作为键名和键值,生成一个新对象。

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

findIndex:返回符合指定条件的成员的位置(类似es6中的Array.findIndex)。

mergeAll:将数组的成员合并成一个对象。

R.mergeAll([{foo:1},{bar:2},{baz:3}])
//=> {foo:1,bar:2,baz:3}

R.mergeAll([{foo:1},{foo:2},{bar:2}])
//=> {foo:2, bar:2}

对象

has:返回一个布尔值,表示对象自身是否具有该属性。

hasIn:返回一个布尔值,表示对象自身或原型链上是否具有某个属性。

where:如果各个属性都符合指定条件,返回true。

var pred = R.where({
  a: R.equals('foo'),
  b: R.complement(R.equals('bar')),
  x: R.gt(__, 10),
  y: R.lt(__, 20)
});

pred({a: 'foo', b: 'xxx', x: 11, y: 19}) //=> true
pred({a: 'xxx', b: 'xxx', x: 11, y: 19}) //=> false
pred({a: 'foo', b: 'bar', x: 11, y: 19}) //=> false
pred({a: 'foo', b: 'xxx', x: 10, y: 19}) //=> false
pred({a: 'foo', b: 'xxx', x: 11, y: 20}) //=> false

omit:过滤指定属性。

R.omit(['a', 'd'])({a: 1, b: 2, c: 3, d: 4})
//=> {b: 2, c: 3}

本文由【waitig】发表在等英博客
本文固定链接:kk常用ramda函数总结
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)