Javascript関数式プログラミング
19525 ワード
かんすうしきプログラミング
コードを整理するプロセス-->インストーラ!
var users = [
{ id : 1, name : 'JM', age : 29},
{ id : 2, name : 'MJ', age : 28},
{ id : 3, name : 'SB', age : 25},
{ id : 4, name : 'YH', age : 27},
{ id : 5, name : 'SH', age : 26}
];
var keys = function(obj) {
return is_object(obj) ? Object.keys(obj) : [];
};
var is_object = function(obj) {
return typeof obj == 'object' && !!obj;
};
var curryr = function(fn) {
return function(a, b) {
return arguments.length == 2 ? fn(a, b) : function(b) { return fn(b,a);};
}
};
var each = curryr(function(list, iter) {
var keyss = keys(list);
for (var i=0, len=keyss.length; i<len; i++) {
iter(list[keyss[i]], keyss[i]);
}
return list;
});
var filter = curryr(function(list, predi) {
var new_list = [];
each(list, function(val) {
if (predi(val)) new_list.push(val);
});
return new_list;
});
var map = curryr(function(list, mapper) {
var new_list = [];
each(list, function(val, key) {
new_list.push(mapper(val, key));
});
return new_list;
});
var get = curryr(function(obj, key) {
return obj == null ? undefined : obj[key];
});
var slice = Array.prototype.slice;
function rest(list, num) {
return slice.call(list, num || 1);
};
var reduce = function(list, iter, memo) {
if (arguments.length == 2) {
memo = list[0];
list = rest(list);
}
each(list, function(val) {
memo = iter(memo, val);
});
return memo
};
var pipe = function() {
var fns = arguments;
return function(arg) {
return reduce(fns, function(arg, fn) {
return fn(arg);
}, arg);
}
};
var go = function(arg) {
var fns = rest(arguments);
return pipe.apply(null, fns)(arg);
};
go(users,
filter(function(user) { return user.age <= 30; }),
map(get('name')),
console.log);
Reference
この問題について(Javascript関数式プログラミング), 我々は、より多くの情報をここで見つけました https://velog.io/@snowgom/Javascript-함수형-프로그래밍テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol