如何从 JavaScript 迭代器中获取满足测试功能的第一项

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

我有一个迭代器对象,我想获取满足测试函数的第一个元素。

我知道如果我将迭代器转换为数组,我可以使用

Array.prototype.find
。例如使用
[...ducks].find((duck) => duck.age >= 3)
语法。

但我不想将迭代器转换为数组,因为这很浪费。在我的示例中,我有很多鸭子,我需要一只旧鸭子,只需几次测试即可找到。

我想知道是否存在一个优雅的解决方案。

javascript iterator
2个回答
2
投票

没有内置任何内容,但您可以轻松地为其编写一个函数,将其粘贴到实用工具包中,然后重用它:

function find(it, callback) {
    for (const value of it) {
        if (callback(value)) {
            return value;
        }
    }
}

用途:

const duck = find(ducks, (duck) => duck.age >= 3);

0
投票

从 ECMAScript 2025 开始,有

find
迭代器辅助方法(以及其他几个迭代器辅助方法)。

如果您的迭代器是由本机函数生成的(例如

Array#values
、生成器函数等),它将继承该方法。如果没有,只需将其转换为与
Iterator.from
相同的值即可。在此示例中,我从生成器函数定义了
ducks
,因此
find
是我可以调用它的方法:

// Mock for an iterator
const ducks = (function* () {
    yield { age: 2 };
    yield { age: 1 };
    yield { age: 5 };
    // Execution will not get at this point
    console.log("this will not print");
    yield { age: 4 };
})();

// Don't create array, but call find on iterator helper object
const oldDuck = ducks.find((duck) => duck.age >= 3);
console.log(oldDuck);

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