Skip to content

2634. Filter Elements from Array

Description

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.

Β 

Example 1:

Input: arr = [0,10,20,30], fn = function greaterThan10(n) { return n > 10; }
Output: [20,30]
Explanation:
const newArray = filter(arr, fn); // [20, 30]
The function filters out values that are not greater than 10

Example 2:

Input: arr = [1,2,3], fn = function firstIndex(n, i) { return i === 0; }
Output: [1]
Explanation:
fn can also accept the index of each element
In this case, the function removes elements not at index 0

Example 3:

Input: arr = [-2,-1,0,1,2], fn = function plusOne(n) { return n + 1 }
Output: [-2,0,1,2]
Explanation:
Falsey values such as 0 should be filtered out

Β 

Constraints:

  • 0 <= arr.length <= 1000
  • -109Β <= arr[i] <= 109

Solutions

Solution 1: Traversal

We traverse the array \(arr\) and for each element \(arr[i]\), if \(fn(arr[i], i)\) is true, we add it to the answer array. Finally, we return the answer array.

The time complexity is \(O(n)\), where \(n\) is the length of the array \(arr\). Ignoring the space consumption of the answer, the space complexity is \(O(1)\).

1
2
3
4
5
6
7
8
9
function filter(arr: number[], fn: (n: number, i: number) => any): number[] {
    const ans: number[] = [];
    for (let i = 0; i < arr.length; ++i) {
        if (fn(arr[i], i)) {
            ans.push(arr[i]);
        }
    }
    return ans;
}

Comments