작성
·
318
0
curryR을 활용해 등록한 map 함수나 _filter함수 동작에
const mapR = _curryR(_map);
console.log(
mapR(v => v.name)(arr) )
);
은 작동하는데 반해
console.log(
mapR(v => v.name, arr)
);
은 작동하지 않습니다...저는 조금 이해가 안가는게
arguments.length ===2 로 파라미터가 2개 들어올때
의 경우의 수 까지 처리 한것으로 알고 있는데 왜 밑에
부분은 작동하지 않는지...맞게 동작하는 것인지
궁금합니다....
만약 제가 놓치고 있는 부분이 있다면 알려주시면
감사드리겠습니다!
답변 4
0
코드입니다! 참고로 _curryR의 주석의 코드도 동작하지
않습니다. ㅠ
// 사용한 어레이 입니다.
const arr = [
{
id: 1,
name: 'kim',
age: 32,
},
{
id: 2,
name: 'Kang',
age: 39,
},
{
id: 3,
name: 'Wong',
age: 24,
},
{
id: 4,
name: 'Cha',
age: 22,
},
{
id: 5,
name: 'Ku',
age: 30
},
{
id: 6,
name: 'Lee',
age: 29,
},
{
id: 7,
name: 'Choi',
age: 42,
},
{
id: 8,
name: 'Chul',
age: 29
}
];
// each 함수 입니다.
function _each(list, itter) {
for(let i = 0; i < list.length; i++) {
itter(list[i]);
}
return list;
};
//_map 함수 입니다.
function _map (list, mapper) {
const newArr = [];
_each(list, v => newArr.push(mapper(v)));
return newArr;
};
//_filter함수 입니다.
function _filter (list, fn) {
const newArr = [];
_each(list, v => fn(v) ? newArr.push(v) : null);
return newArr;
};
function _curryR (fn) {
return (...args) => args.length === 2 ? fn(args[0], args[1]) : (b) => fn(b, args[0]);
// return function(a, b) {
// return arguments.length == 2 ? fn(a, b) : function(b) { return fn(b, a); };
// }
};
const _mapR = _curryR(_map);
const _filterR = _curryR(_filter);
console.log(
_mapR(v => v.name)(arr), // 작동
_mapR(v => v.name, arr) // 타입에러
);
// TypeError: mapper is not a function 에러 내용 입니다.
0
코드입니다! 참고로 _curryR의 주석의 코드도 동작하지
않습니다. ㅠ
// 사용한 어레이 입니다.
const arr = [
{
id: 1,
name: 'kim',
age: 32,
},
{
id: 2,
name: 'Kang',
age: 39,
},
{
id: 3,
name: 'Wong',
age: 24,
},
{
id: 4,
name: 'Cha',
age: 22,
},
{
id: 5,
name: 'Ku',
age: 30
},
{
id: 6,
name: 'Lee',
age: 29,
},
{
id: 7,
name: 'Choi',
age: 42,
},
{
id: 8,
name: 'Chul',
age: 29
}
];
// each 함수 입니다.
function _each(list, itter) {
for(let i = 0; i < list.length; i++) {
itter(list[i]);
}
return list;
};
//_map 함수 입니다.
function _map (list, mapper) {
const newArr = [];
_each(list, v => newArr.push(mapper(v)));
return newArr;
};
//_filter함수 입니다.
function _filter (list, fn) {
const newArr = [];
_each(list, v => fn(v) ? newArr.push(v) : null);
return newArr;
};
function _curryR (fn) {
return (...args) => args.length === 2 ? fn(args[0], args[1]) : (b) => fn(b, args[0]);
// return function(a, b) {
// return arguments.length == 2 ? fn(a, b) : function(b) { return fn(b, a); };
// }
};
const _mapR = _curryR(_map);
const _filterR = _curryR(_filter);
console.log(
_mapR(v => v.name)(arr), // 작동
_mapR(v => v.name, arr) // 타입에러
);
// TypeError: mapper is not a function 에러 내용 입니다.
말씀하신대로는 정상 작동 하는데 자꾸 질문 드려 죄송합니다 ㅠ
강의에서도 map 함수에 _curryr을 적용한 부분이 함수로 받은 인자를 먼저 받아 나중에 배열을 받아
함수를 유연하고 더 실용적인 함수로 사용할 수 있도록 _map = _curryr(_map); 이렇게 재 정의 한 뒤
위 말씀대로 먼저 받을 어레이를 뒤로 즉, 매핑함수를 먼저 받은 뒤 어레이를 받는 형식으로
제 코드 _mapR(v => v.name, arr); 요렇게 작동하는게 맞지 않은지요...ㅠ
_mapR(v => v.name)(arr); 요건 작동하고 바로위는 왜 작동 안하는지..제가 뭘 잘못 이해 하는지..
분명히 args.length === 2 ? fn(args[0], args[1]) : b => fn(b, args[0]); 을 통해
// CTO님 코드 return arguments.length === 2 ? fn(a, b) : function(b) return{ fn(b,a) };
mapR(v => v.name, arr)와 같이 인자가 한번에 두개가 들어 오더라도 동작할 수 있게 처리 했는데
왜 동작을 안하는 것인지.....이해가 가지 않네요...제가 뭔가 잘못 짚은 포인트가 있을까요ㅠㅠ