Lodash,在循环中调用函数并返回第一个匹配结果

时间:2016-09-17 08:40:37

标签: javascript typescript lodash

我想遍历一个对象数组,在它们上面调用一个方法。如果该方法的结果满足某些条件。我想立即返回那个结果。我写了这个:

public getFirstMatch(value: string, allValues: string[]): Result {
    let foundResult = undefined;
    _.find(this.myArrayofMatchers, matcher => {
        let result = matcher.isMatch(value, allValues);
        if(result.isMatch){
            foundResult = result;
            return true;
        }
    })

    return foundResult || new Result(false);
}

它有效,但似乎很笨拙和不清楚。 _.find,imho,并不是我正在尝试做什么的明确指标,因为我不关心实际的matcherfoundResult需要存在的事实是我觉得非常难看的事情。它似乎需要更长的时间。 我能在这里做得更好吗?这有更好的lodash功能吗?

顺便说一句,这就是我的想法,使用for循环

public isMatch(value: string, allValues: string[]): Result {
    for (let i = 0; i < this.myArrayofMatchers.length; i++){
        let result = this.myArrayofMatchers[i].isMatch(value, allValues);
        if (result.isMatch) {
            return result;
        }
    }
    return new Result(false);
}

1 个答案:

答案 0 :(得分:1)

您正在使用_.find,如_.foreach。这不好。 Lodash找到返回值,所以你应该利用它。

您的方法应如下所示:

public getFirstMatch(value: string, allValues: string[]): Result {
    const foundResult = _.find(
        this.myArrayofMatchers,
        matcher => matcher.isMatch(value, allValues).isMatch
    );

    return foundResult || new Result(false);
}