/
45case
/
ptable
Обзор
Документация
Войти
/
45case
/
ptable
Код
Запросы
3
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
dev
src/entities/table/lib/getPeriodicTableMatrix.ts
55 строк
2 KB
Olya
feat: интерактивная подсветка элементов по сериям и агрегатным состояниям
15 июл 2026, 18:34
15 июл 2026, 18:34
681598d
Код
Авторство
О чём код?
import { getElements } from "../../element/api/elements"; import type { PeriodicElement } from "../../element/model/elements"; const PERIODIC_TABLE_COLUMNS = 18; const EXTENDED_TABLE_COLUMNS = 32; const EXTENDED_TABLE_ROWS = 7; const elementRecords = getElements(); const periodicTableRows = elementRecords.reduce((maxRow, element) => { return Math.max(maxRow, element.row); }, 0); const periodicTableMatrix: Array<Array<PeriodicElement | null>> = Array.from( { length: periodicTableRows }, () => { return Array.from({ length: PERIODIC_TABLE_COLUMNS }, () => null); }, ); for (const element of elementRecords) { const columnOffset = element.group === null ? 1 : 0; periodicTableMatrix[element.row - 1][element.column - 1 + columnOffset] = element; } function getExtendedColumn(element: PeriodicElement): number { if (element.group === null) { return element.column; } if (element.group <= 2) { return element.group; } return element.group + 14; } const extendedTableMatrix: Array<Array<PeriodicElement | null>> = Array.from( { length: EXTENDED_TABLE_ROWS }, () => { return Array.from({ length: EXTENDED_TABLE_COLUMNS }, () => null); }, ); for (const element of elementRecords) { const rowIndex = element.period - 1; const columnIndex = getExtendedColumn(element) - 1; extendedTableMatrix[rowIndex][columnIndex] = element; } export function getPeriodicTableMatrix() { return periodicTableMatrix; } export function getExtendedPeriodicTableMatrix() { return extendedTableMatrix; }