Skip to content

Commit 489d828

Browse files
committed
fix(filterfirst): fix inverted predicate in filterFirst function
1 parent ea3e00e commit 489d828

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

index.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -261,29 +261,11 @@ export function filterFn<T>(
261261

262262
/** @deprecated This function is confusing, use {@link excludeFirst} instead,
263263
* and invert the predicate. */
264-
export function* filterFirst<T>(
264+
export function filterFirst<T>(
265265
iterable: Iterable<T>,
266266
predicate: (element: T, index: number) => boolean
267267
): Iterable<T> {
268-
const iterator = iterable[Symbol.iterator]();
269-
let element = iterator.next();
270-
271-
for (let i = 0; element.done !== true; ++i) {
272-
if (predicate(element.value, i)) {
273-
break;
274-
}
275-
yield element.value;
276-
element = iterator.next();
277-
}
278-
279-
if (element.done !== true) {
280-
element = iterator.next();
281-
}
282-
283-
while (element.done !== true) {
284-
yield element.value;
285-
element = iterator.next();
286-
}
268+
return excludeFirst(iterable, (element, index) => !predicate(element, index));
287269
}
288270

289271
/** @deprecated This function is confusing, use {@link excludeFirstFn} instead,
@@ -311,11 +293,29 @@ export function excludeNull<T>(iterable: Iterable<T | null | undefined>): Iterab
311293
return filter(iterable, isNotNull);
312294
}
313295

314-
export function excludeFirst<T>(
296+
export function* excludeFirst<T>(
315297
iterable: Iterable<T>,
316298
predicate: (element: T, index: number) => boolean
317299
): Iterable<T> {
318-
return filterFirst(iterable, (element, i) => !predicate(element, i));
300+
const iterator = iterable[Symbol.iterator]();
301+
let element = iterator.next();
302+
303+
for (let i = 0; element.done !== true; ++i) {
304+
if (predicate(element.value, i)) {
305+
break;
306+
}
307+
yield element.value;
308+
element = iterator.next();
309+
}
310+
311+
if (element.done !== true) {
312+
element = iterator.next();
313+
}
314+
315+
while (element.done !== true) {
316+
yield element.value;
317+
element = iterator.next();
318+
}
319319
}
320320

321321
export function excludeFirstFn<T>(

0 commit comments

Comments
 (0)