/
45case
/
ptable
Обзор
Документация
Войти
/
45case
/
ptable
Код
Запросы
3
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
src/entities/element/api/elements.ts
65 строк
2 KB
Olya
first_commit
06 июл 2026, 18:16
06 июл 2026, 18:16
0ff6e29
Код
Авторство
О чём код?
import rawElements from "./elements.json"; import type { PeriodicElement } from "../model/elements"; const elementRecords = [...(rawElements as PeriodicElement[])].sort( (left, right) => left.atomicNumber - right.atomicNumber, ); const elementsByAtomicNumber = new Map( elementRecords.map((element) => [element.atomicNumber, element]), ); const elementsBySlug = new Map(elementRecords.map((element) => [element.slug, element])); const elementsBySymbol = new Map( elementRecords.map((element) => [element.symbol.toLowerCase(), element]), ); export function getElements(): readonly PeriodicElement[] { return elementRecords; } export function searchElements(query: string) { const normalizedQuery = query.trim().toLowerCase(); if (!normalizedQuery) { return elementRecords; } const normalizedAtomicNumber = Number.parseInt(normalizedQuery, 10); const hasAtomicNumberQuery = Number.isInteger(normalizedAtomicNumber); return elementRecords.filter((element) => { return ( element.slug.includes(normalizedQuery) || element.symbol.toLowerCase() === normalizedQuery || element.name.toLowerCase().includes(normalizedQuery) || element.nameEn.toLowerCase().includes(normalizedQuery) || (hasAtomicNumberQuery && element.atomicNumber === normalizedAtomicNumber) ); }); } export function getElementByAtomicNumber(atomicNumber: number | null) { if (atomicNumber == null) { return null; } return elementsByAtomicNumber.get(atomicNumber) ?? null; } export function getElementBySlug(slug: string | null) { if (!slug) { return null; } return elementsBySlug.get(slug.toLowerCase()) ?? null; } export function getElementBySymbol(symbol: string | null) { if (!symbol) { return null; } return elementsBySymbol.get(symbol.toLowerCase()) ?? null; }