我想遍历一个对象数组,在它们上面调用一个方法。如果该方法的结果满足某些条件。我想立即返回那个结果。我写了这个:
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,并不是我正在尝试做什么的明确指标,因为我不关心实际的matcher
。 foundResult
需要存在的事实是我觉得非常难看的事情。它似乎需要更长的时间。 我能在这里做得更好吗?这有更好的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);
}
答案 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);
}