Filter ?
map?
every?
filter는 array에 적용할 수 있는 메서드로 array의 elements 를 이름처럼 filtering하는 기능을 담고 있다. 개념은 배열의 모든 요소를 순회하면서 주어진 함수로 각 요소를 판별해 true를 반환하는 요소만으로 새로운 배열을 생성한다. filter메서드는 원래 배열을 수정하지 않으며 새로운 배열을 반환한다.
아래 예제에서 filter 메서드는 numbers배열에서 숫자 2보다 큰 요소만 골라 새로운 배열을 만들어 반환한다.
const numbers = [1, 2, 3, 4, 5];
const filteredNumbers = numbers.filter(function(number) {
return number > 2;
});
console.log(filteredNumbers); // [3, 4, 5]
map 메서드는 배열의 모든 요소를 순회하며 각 요소를 주어진 함수에 따라 새로운 값으로 변환해 새로운 배열을 만든다. map 매서드 또한 filter 처럼 원래의 배열을 수정하지 않으며 새로운 배열을 반환한다.
이 예제에서 map 메서드는 numbers 배열의 각 요소를 제곱해 새로운 배열을 생성한다.
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map(function(number) {
return number * number;
});
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
every 메서드는 배열의 모든 요소를 순회하며, 주어진 함수가 모든 요소에 대해 true를 반환하는지 확인한다. 모든 요소가 조건을 만족할 때, true를 반환하며, 그렇지 않으면 false를 반환한다.
function solution(s) {
if(s.length === 4 || s.length === 6){
return s.split("").every((el)=> isNaN(el/1) === false)}
else { return false }
}
위의 예제는 길이가 4 혹은 6 이며 배열의 모든 요소가 문자가 섞이지 않고 숫자로 구성되어있는지 판별하는 알고리즘에 대한 솔루션인데, 먼저 string 타입인 s의 각 요소들을 split("")으로 쪼개 각각 배열에 담아둔 후 판별을 위해 every메서드를 사용한 예시이다.
split으로 문자열을 쪼개 담은 배열의 모든 요소에 대해 순회하며 각 요소를 1로 나눈 것(Number이면 Number가 되고 String type이면 오류가 발생할 것임)을 isNaN(숫자인지 아닌지 판별하는 메서드)을 통해 판단해 모든 요소가 숫자라면 true를 반환하게 한다.