컬렉션 중심 프로그래밍
컬렉션 = 배열이나 돌림직한 데이터 (array, list)
컬렉션 중심 프로그래밍은 함수형 프로그래밍에서 더 빛을 발하는 프로그래밍이다.
컬렉션 중심 프로그래밍의 4가지 유형과 함수
Map
function _map(list, mapper) {
var new_list = [];
_each(list, function(val, key) {
new_list.push(mapper(val, key));
});
return new_list;
}
Values (key, value 쌍으로 이루어진 객체 에서 value만 꺼내는 함수)
function _values(data) {
return _map(data, function(val) { return val; })
}
function _identity(val) {
return val;
}
function _values(data) {
return _map(data, _identity )
}
var _values = _map(_identity);
_values(data)
Pluck ((key, value 쌍으로 이루어진 객체와 key를 인자로 넣고 key에 해당하는 value들만 꺼내는 함수)
function _pluck(data, key) {
return _map(data, function (obj) {
return obj[key];
});
}
function _pluck(data, key) {
return _map(data, _get(key));
}
var _get = _curryr(function(obj, key) {
return obj == null ? undefined : obj[key];
});
Reject (filter 함수를 반대로 동작시킨 것 즉, 조건에 true인 값들을 제외시키는 함수 )
function _reject(data, predi) {
return _filter(data, function (val) {
return !predi(val);
});
}
function _negate(func) {
return function (val) {
return !func(val);
};
}
function _reject(data, predi) {
return _filter(data, _negate(predi));
}
Compact (truthy한 값만 남기는 함수, 긍정적인 값만 남기는 함수)
var _compact = _filter(_identity);
Find(배열안에 있는 값 중 조건에 최초로 해당하는(맨 처음)값을 리턴하는 함수)
function _find(list, predi) {
var keys = _keys(list);
for (var i = 0, len = keys.length; i < len; i++) {
var val = list[keys[i]];
if (predi(val)) return val;
}
}
Find_index(조건에 해당하는 값을 처음만났을 때의 인덱스를 리턴하는 함수)
function _find_index(list, predi) {
var keys = _keys(list);
for (var i = 0, len = keys.length; i < len; i++) {
if (predi(val)) return i;
}
return -1
}
Some ( 특정 조건에 해당하는 값이 하나라도 있으면 true를 리턴하는 함수 )
function _some(data, predi) {
return _find_index(data, predi || _identity) != -1;
}
Every ( 모든 값이 특정 조건을 만족해야 true를 리턴하는 함수 )
function _every(data, predi) {
return _find_index(data, _negate(predi || _identity)) == -1;
}
Min(제일 작은 값을 반환), max(제일 큰 값을 반환), min_by(어떤 조건을 통해서 비교를 할 것인지를 추가한 함수), max_by(어떤 조건을 통해서 비교를 할 것인지를 추가한 함수)
function _min(data) {
return _reduce(data, function (a, b) {
return a < b ? a : b;
});
}
function _max(data) {
return _reduce(data, function (a, b) {
return a > b ? a : b;
});
}
function _min_by(data, iter) {
return _reduce(data, function (a, b) {
return iter(a) < iter(b) ? a : b;
});
}
function _max_by(data, iter) {
return _reduce(data, function (a, b) {
return iter(a) > iter(b) ? a : b;
});
}
var _min_by = _curryr(_min_by),
_max_by = _curryr(_max_by);
_go(
users,
_filter((user) => user.age >= 30),
Group_by( 특정 조건을 통해서 그룹을 지어주는 함수), push
Count_by(특정 조건에 해당하는 key가 몇 개인지 (그룹이 몇 개인지)구하는 함수 ), inc(증가시키는 함수)