forEach, map, filter, reduce
// forEach 예)
a=[10,11,12,13,14,15];
a.forEach(function(v,i){
console.log(v,i,this)// 10 0 / 11 1 / 12 2 ...
}, [1,2])
this([1,2])까지 출력하면 이렇게 됨
// forEach 내부가 이렇게 되어있을 것이다 쌤 뇌피셜
function forEach(predicate, thisArg){//함수(predicate)를 받는다
for(let i=0; i<a.length; i++){
predicate(a[i], i);
}
}
a=[10,11,12,13,14,15]
let answer=a.map(function(v,i){
return v*v;
},[1,2]);
console.log(answer);
이런식으로 호출됨
//map 내부함수는 이렇게 되어있지 않을까? 쌤뇌피셜
function map(predicate, thisArg){
let list=[];
for(let i=0; i<a.length; i++){
list.push(predicate(a[i],i));
}
return list;
}
이런식으로 map 돌릴 때 짝수만 return 하게 해도
map 내부 함수는 못받은 값도 다 호출한다. (원본배열과 새로운 배열의 길이는 똑같을 수 밖에 없음)
a=[10,11,12,13,14,15]
let answer=a.filter(function(v,i){
return v%2===0 //참을 리턴했을 때의 요소만 저장한다.
},[1,2]);
console.log(answer) //[10,12,14]
//filter 내부함수 쌤 뇌피셜
function filter(){
let list=[];
for(let i=0; i<a.length; i++){
if(predicate(a[i],i)) list.push(a[i]) //조건문이 참일때만 push
}
return list;
}
a=[10,11,12,13,14,15]
let answer= a.reduce(function(acc, cur){
return acc+cur;
},0) //0으로 초기화하는 값
console.log(answer);
//reduce 내부함수는 이렇게 생기지 않을까? 쌤 뇌피셜
function reduce(predicate, val){
let result=val;
for(let i=0; i<a.length; i++){
result = predicate(result, a[i])
}
return result //이 result 값이 위 함수의 acc로 간다.
}