Skip to content

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}]

Try It

see pipe, toAsync, toArray

Open Source Code

Released under the Apache-2.0 License.