function이 바로 작동되는 경우 function의 이름을 지정해줄 필요가 없다
마찬가지로 function에서 새로운 변수가 필요하지 않으면 매개변수 또한 생략할 수 있다
eg.function () {return true;}
arr.filter(function)
filter는 배열을 받아 배열을 return하는 함수 명령어이다. 배열을 입력하지 않는다면 에러를 뱉어낸다.
빈 배열을 입력받거나 배열안에 조건에 만족하는 element가 하나도 없다면 빈 배열을 뱉어낸다.
arr.map(function)
map은 arr의 모든 element에 fuction을 수행한 배열을 출력한다.
arr.reduce(function)
reduce는 arr의 element 값들을 이용해서 무언가를 할 때 사용하는 듯하다.
function을 {return el1+el2;}식으로 두 변수에 대한 함수로 설정하면 element들에 대해 차례대로 함수를 적용한 값을 뱉어낸다.
특이한 점은 함수 뒤에 임의의 요소를 추가해서 함수에 대한 추가적인 계산을 실행할 수도 있다는 점이다.
eg. arr.reduce(function,4)
이 때 추가적인 요소는 한개가 한계이면 두개 이상의 값을 추가적으로 입력해 준다고 해도 계산하지 않고 첫번째 요소만 계산한 값을 내준다.
compose
reduce를 사용할 때 주의할 점(reduce에서 NaN이 나오는 경우)
return filtered.reduce(function(el1, el2) {
return el1+el2.score;
},0)
reduce 함수에서 el1.score+el2.score를 return하면 안된다!!
WHY?) el1에 들어가는 값은 object가 아니라 축적되는 값인 number이기 때문에!!
새로 입력되는 값 el2와
축적되어있는 값 el1이 어떤 형태인지 유의하자!
map은 원본 배열을 바꾼다 아니다
원본 배열이 객체인 경우에만 바뀐다
콜백 함수와 클로저 함수의 차이
클로저 함수는 외부함수에서 내부함수의 변수를 인자로 받는??? 정의 찾아보기
중요!!!!!
arr.reduce(callback( accumulator, currentValue[, index[, array]] )[, initialValue])
//accumulator :축적값
//[] :대괄호 안에 값은 없어도 된다!
즉, callback, accumulator, currentValue는 반드시 있어야 한다!!
[1,2,3,4].reduce(function callback(acc, cur){
console.log(으앗?:${cur})
})
//
으앗?:2
으앗?:3
으앗?:4
// 초기값이 없으면 1번 인덱스부터 cur에 들어간다.
[1,2,3,4].reduce(function callback(acc, cur){
console.log(으앗?:${cur})
},0)
//
으앗?:1
으앗?:2
으앗?:3
으앗?:4
// 초기값이 있으면 0번 인덱스부터 cur에 들어간다.