Javascript 함수형 프로그래밍

이정민·2021년 12월 16일
0

함수형 프로그래밍

코드의 진행과정 정리 --> 클릭!!


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);
profile
안녕하세요.

0개의 댓글