filter / map / every

quin1392·2022년 5월 19일
0

filter

Array.protoype.filter()

filter 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열을 만들어냅니다. filter에 사용되었던 원래의 배열을 해치지 않는다는 특징을 가집니다.

const words = ['abcd', 'abcdef', 'abc', 'abcde', 'ab', 'abcdefg']

const result = words.filter((word) => word.length > 3);

console.log(result)	// Array ["abcd", "abcdef", "abcde", "abcdefg"]

filter 함수는 매개변수로 함수와 3개의 인자를 받을 수 있습니다.

arr.filter(callback(element, index, array), thisArg)

callback은 filter의 조건으로 사용한 함수를 의미합니다. element는 본래의 배열에서 가져온 각각의 요소를 의미합니다. index는 요소를 뽑아온 배열의 현재 index 번호를 의미합니다. array는 filter를 호출한 배열을 의미합니다. thisArg는 callback을 실행할 대 this로 사용하는 값입니다.

filter는 내부의 callback 함수를 호출해서 조건을 비교하고 true 값이 되는 element를 새로운 배열에 저장합니다. 테스트를 통과하지 못한 element는 그냥 건너뛰어 배열에 저장되지 않습니다.

map

Array.prototype.map()

map 메서드는 배열 내의 모든 요소 각각에 대해서 주어진 함수를 호출한 결과를 모아서 새로운 배열을 반환합니다. map 메서드는 원래의 배열에 대해 함수를 호출한 결과를 리턴하지만 원본 배열을 해치지 않습니다.

arr.map(callback(currentValue, index, array), thisArg)

map 메서드도 callback 함수를 인자로 받는데 새로운 배열을 요소를 생성하는데 세 가지 인수를 가집니다. currentValue는 현재 뽑아져 나온 처리할 요소를 의미하고, index는 현재 처리하는 요소의 인덱스 값, array는 map 메서드를 호출한 배열을 의미합니다.

map은 각각의 요소에 대해서 callback 함수가 적용되어 그 함수의 반환값으로 새로운 배열을 만듭니다. 배열 값이 없는, 즉 할당 / 정의 되지 않은 인덱스는 무시됩니다.

const arr = [1, 2, 3, 4, 5]

const newArr = arr.map((cur) => cur * 2)

console.log(newArr)		// Array [1, 2, 3, 4, 5]
console.log(arr)		// Array [2, 4, 6, 8, 10]

every

every 함수는 배열 내의 요소가 주어진 판별을 위한 함수를 모두 통과하는지 테스트합니다. 모든 요소에 대해서 판별이 진행되며, 반환 되는 값은 Boolean 타입입니다.

arr.every((element, index, array) => {  ...  })

판별을 위해서 세가지 인수를 전달 받습니다. element는 판별이 진행될 현재 요소, index는 처리할 현재 요소의 인덱스, array는 every 메서드를 호출한 배열입니다. 메서드 실행결과 모든 배열 요소를 판별하고 그 모든 결과가 참인 값을 반환하면 true, 그 외에는 false를 반환합니다. every 메서드는 하나라도 false가 나오면 리턴 결과가 false이므로 중간에 false 결과가 나오면 즉시 메서드 실행을 종료합니다. every 역시 호출한 배열을 변형하지 않는데 특이한 점은 빈 배열에 대해서는 true 값을 반환합니다.

const numbers = [10, 20, 30, 15, 25, 35]

const result = numbers.every((element) => element < 20)

console.log(result)		// false

0개의 댓글