返回 JS 数组中满足条件并映射的第一个元素的正确方法

问题描述 投票:0回答:1

假设我们有一个进行昂贵计算的函数和一个用于计算的源值数组。我们想要获得函数的第一个不为空的返回值并返回它。

function expensiveFunction(params) {...}

// this is how it can be achieved using ordinary for loop
let paramsCollection = ["params1", "params2" /*, ...*/];
let result;
for (let i=0; i<paramsCollection.length; i++) {
    result = expensiveFunction(paramsCollection[i]);
    if (result) {
        break;
    }
}

我想使用数组方法来做到这一点。

Array.find
只会返回函数返回某些内容的元素。

Array.map
将为所有元素运行昂贵的计算,即使第一个元素没问题。

Array.reduce
可以完成这项工作,但无论如何它都会迭代数组 - 即使它不调用
expensiveFunction
感觉很糟糕..

let paramsCollection = ["params1", "params2" /*, ...*/];
let result = paramsCollection.reduce((acc, cur) => acc ? acc : expensiveFunction(cur), null);

知道如何做到这一点,但没有上述示例的缺点吗?

javascript arrays reduce
1个回答
0
投票

您可以根据

mapFind
编写自己的
Array.prototype.find

function mapFind(arr, f) {
  let result;
  
  arr.find(el => {
    let temp = f(el);
    if (temp) result = temp;
    return result;
  });
  return result;
}

function expensiveFunction(params) {
  return params > 7 ? params * params : 0;
}
console.log(mapFind([1, 2, 3], expensiveFunction));
console.log(mapFind([7, 8, 9], expensiveFunction));

© www.soinside.com 2019 - 2024. All rights reserved.