列表

详情


2634. 过滤数组中的元素

请你编写一个函数,该函数接受一个整数数组参数 arr 和一个过滤函数 fn,并返回一个过滤后元素数量较少或元素数量相等的新数组。

返回的数组应该只包含通过过滤函数 fn(arr[i], i) 计算后为真值的元素。

请你在不使用内置函数 Array.filter 的前提下解决该问题。

 

示例 1:

输入:arr = [0,10,20,30], fn = function greaterThan10(n) { return n > 10; }
输出: [20,30]
解释:
const newArray = filter(arr, fn); // [20, 30]
过滤函数过滤掉不大于 10 的值

示例 2:

输入:arr = [1,2,3], fn = function firstIndex(n, i) { return i === 0; }
输出:[1]
解释:
过滤函数 fn 也可以接受每个元素的索引
在这种情况下,过滤函数删除索引不为 0 的元素

示例 3:

输入:arr = [-2,-1,0,1,2], fn = function plusOne(n) { return n + 1 }
输出:[-2,0,1,2]
解释:
像 0 这样的假值应被过滤掉

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * @param {number[]} arr * @param {Function} fn * @return {number[]} */ var filter = function(arr, fn) { };

typescript 解法, 执行用时: 64 ms, 内存消耗: 42.4 MB, 提交时间: 2023-09-12 10:06:19

function filter(arr: number[], fn: (n: number, i: number) => any): number[] {
    return arr.filter(fn);
};

typescript 解法, 执行用时: 64 ms, 内存消耗: 42.3 MB, 提交时间: 2023-09-12 10:05:49

function filter(arr: number[], fn: (n: number, i: number) => any): number[] {
    return arr.reduce((result, current, index) => {
        if (fn(current, index)) {
            result.push(current)
        }
        return result;
    }, [] as number[])
};

javascript 解法, 执行用时: 72 ms, 内存消耗: 41 MB, 提交时间: 2023-04-17 15:31:46

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

javascript 解法, 执行用时: 56 ms, 内存消耗: 41.1 MB, 提交时间: 2023-04-17 15:31:27

/**
 * @param {number[]} arr
 * @param {Function} fn
 * @return {number[]}
 */
var filter = function(arr, fn) {
    return arr.filter(fn);
};

上一题