문제

Given an integer array arr and a filtering function fn, return a filtered array filteredArr.

The fn function takes one or two arguments:

arr[i] - number from the arr
i - index of arr[i]
filteredArr should only contain the elements from the arr for which the expression fn(arr[i], i) evaluates to a truthy value. A truthy value is a value where Boolean(value) returns true.

Please solve it without the built-in Array.filter method.

 

예제

arr, fn이 주어지면 arr의 각 원소를 fn 함수에 넣은 뒤 반환값이 True일 경우에만 Output 배열에 추가시킨다.

 

fn 함수에서 두 개의 파라미터를 필요로 할 땐, 첫 번째 인자로 arr의 각 원소를, 두 번째 인자로 각 원소의 인덱스 번호 i를 넣는다. 위 예제의 경우 인덱스 번호가 0인 경우에만 Output 배열에 추가된다.

 

0과 같은 Falsy한 값도 함수에서 걸러져야 한다. arr의 원소들 중 -1의 경우, plusOne 함수에 들어갔을 때 return 값이 0이 되어 Output 배열에 추가되지 않는다.

 

 

코드

/**
 * @param {number[]} arr
 * @param {Function} fn
 * @return {number[]}
 */
var filter = function(arr, fn) {
    const filteredArr = [];
    
    for (let i = 0; i < arr.length; i++) {
        if (fn(arr[i], i)) {
            filteredArr.push(arr[i]);
        }
    }
    
    return filteredArr;
};

arr에 대해 순회하면서 fn 함수에 원소와 인덱스값을 넣고 반환값을 확인한다. 만약 반환값이 True이면 filteredArr에 추가하고, 반환값이 False이면 추가하지 않는다.

+ Recent posts