uniqBy() function
uniqとは異なり、指定された Iterable/AsyncIterable 内でfを適用して重複値を削除した Iterable/AsyncIterable を返します。結果の値の順序は、配列内で出現する順序によって決定されます。
Signature:
typescript
declare function uniqBy<A, B>(
f: (a: A) => B,
iterable: Iterable<A>,
): IterableIterator<A>;Example
ts
const iter = uniqBy(
(a) => a.age,
[{ age: 21 }, { age: 23 }, { age: 21 }, { age: 34 }],
);
iter.next(); // {done:false, value: {age: 21}}
iter.next(); // {done:false, value: {age: 23}}
iter.next(); // {done:false, value: {age: 34}}
iter.next(); // {done:true, value: undefined}
// with pipe
pipe(
[{ age: 21 }, { age: 23 }, { age: 21 }, { age: 34 }],
uniqBy((a) => a.age),
toArray,
); // [{age: 21}, {age: 23}, {age: 34}]
await pipe(
Promise.resolve([{ age: 21 }, { age: 23 }, { age: 21 }, { age: 34 }]),
uniqBy((a) => a.age),
toArray,
); // [{age: 21}, {age: 23}, {age: 34}]
// if you want to use asynchronous callback
await pipe(
Promise.resolve([{ age: 21 }, { age: 23 }, { age: 21 }, { age: 34 }]),
toAsync,
uniqBy(async (a) => a.age),
toArray,
); // [{age: 21}, {age: 23}, {age: 34}]
// toAsync
await pipe(
[
Promise.resolve({ age: 21 }),
Promise.resolve({ age: 23 }),
Promise.resolve({ age: 21 }),
Promise.resolve({ age: 34 }),
],
toAsync,
uniqBy((a) => a.age),
toArray,
); // [{age: 21}, {age: 23}, {age: 34}]