Add util function uniqById

This commit is contained in:
2026-03-20 19:26:19 +01:00
parent 00e350579c
commit 111fb9b8d2
2 changed files with 13 additions and 1 deletions
+2
View File
@@ -1870,3 +1870,5 @@ if (typeof window !== 'undefined') {
const nodeLoadTime = getNanoSeconds() - process.uptime() * 1e9; const nodeLoadTime = getNanoSeconds() - process.uptime() * 1e9;
counterNow = () => (getNanoSeconds() - nodeLoadTime) / 1e6; counterNow = () => (getNanoSeconds() - nodeLoadTime) / 1e6;
} }
export type PrimitiveValues = string | number | symbol | boolean;
+11 -1
View File
@@ -1,6 +1,6 @@
import { HttpErrorResponse } from '@angular/common/http'; import { HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Point, Rect, Entity, Dict, Holiday, Season } from './interfaces'; import { Point, Rect, Entity, Dict, Holiday, Season, PrimitiveValues } from './interfaces';
import { tileWidth, tileHeight, SECOND, MINUTE, HOUR, DAY } from './constants'; import { tileWidth, tileHeight, SECOND, MINUTE, HOUR, DAY } from './constants';
import { ACCESS_ERROR, NOT_FOUND_ERROR, OFFLINE_ERROR, PROTECTION_ERROR } from './errors'; import { ACCESS_ERROR, NOT_FOUND_ERROR, OFFLINE_ERROR, PROTECTION_ERROR } from './errors';
@@ -562,3 +562,13 @@ export function getY(e: AnyEvent): number {
export function isKeyEventInvalid(e: KeyboardEvent) { export function isKeyEventInvalid(e: KeyboardEvent) {
return e.target && /^(input|textarea|select)$/i.test((<any>e.target).tagName); return e.target && /^(input|textarea|select)$/i.test((<any>e.target).tagName);
} }
export function uniqById<T>(array: T[], uniqueKey: (self: T) => PrimitiveValues) {
const seen = new Set<PrimitiveValues>();
return array.filter(item => {
const id = uniqueKey(item);
const isDuplicate = seen.has(id);
seen.add(id);
return !isDuplicate;
});
}