2634. 过滤数组中的元素
2634. 过滤数组中的元素
题目
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 thearr
i
- index ofarr[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)
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)
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)
Output: [-2,0,1,2]
Explanation:
Falsey values such as 0 should be filtered out
Constraints:
0 <= arr.length <= 1000
-10^9 <= arr[i] <= 10^9
题目大意
给定一个整数数组 arr
和一个过滤函数 fn
,并返回一个过滤后的数组 filteredArr
。
fn
函数接受一个或两个参数:
arr[i]
-arr
中的数字i
-arr[i]
的索引
filteredArr
应该只包含使表达式 fn(arr[i], i)
的值为 真值 的 arr
中的元素。真值 是指 Boolean(value)
返回参数为 true
的值。
请在不使用内置的 Array.filter
方法的情况下解决该问题。
提示:
0 <= arr.length <= 1000
-10^9 <= arr[i] <= 10^9
解题思路
这道题考察的是对数组的过滤操作,类似于 JavaScript 内置的 Array.prototype.filter
函数。
- 初始化一个新数组:用于存储所有通过回调函数
fn
检查的元素。 - 遍历数组:对于数组中的每一个元素,通过回调函数
fn
来检查是否保留该元素。 - 保存符合条件的元素:将符合条件的元素存入新数组。
- 返回新数组:所有元素过滤完成后,返回包含符合条件元素的新数组。
复杂度分析
- 时间复杂度:
O(n)
,其中n
是数组的长度,需要遍历整个数组,对每个元素调用回调函数fn
。 - 空间复杂度:
O(n)
,因为需要一个新数组来存储过滤后的元素。
代码
/**
* @param {number[]} arr
* @param {Function} fn
* @return {number[]}
*/
var filter = function (arr, fn) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (fn(arr[i], i)) {
result.push(arr[i]);
}
}
return result;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 |
---|---|---|---|---|
2626 | 数组归约运算 | [✓] | ||
2631 | 分组 | [✓] | ||
2635 | 转换数组中的每个元素 | [✓] |