Хелпер, що конвертує одновимірний масив у дерево коментарів
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
comments-to-tree — TypeScript / JavaScript хелпер, що конвертує одновимірний масив у дерево коментарів.
Установка:
npm install comments-to-tree --save
Щоб використовувати цей хелпер, коментарі, що приходять з бази даних, повинні мати одне обов’язкове поле commentId
та одне опціональне — parentId
.
Увесь одновимірний масив з бази даних повинен бути відсортований у зворотному порядку, тобто на початку масива повинні йти найновіші коментарі.
Це мінімальні умови, за яких хелпер вже працюватиме:
import { DefaultCommentsToTree } from 'comments-to-tree'; const commentsTree = DefaultCommentsToTree.getTree(allCommentsFromDb);
Але в реальних умовах, користувачам потрібно буде розширити батьківський клас DefaultCommentsToTree
щоб переписати метод transform()
import { DefaultCommentsToTree, DefaultCommentFromDb, DefaultComment } from 'comments-to-tree'; interface CommentFromDb extends DefaultCommentFromDb { // Additional property from database. someOtherPropertyFromDb: string; } interface Comment extends DefaultComment { // Additional transformed property. someOtherProperty: string; } class CommentsToTree extends DefaultCommentsToTree { protected static transform(allCommentsFromDb: CommentFromDb[]): Comment[] { return allCommentsFromDb.map(commentFromDb => { return { commentId: commentFromDb.commentId, parentId: commentFromDb.parentId || 0, children: [], // Additional property. someOtherProperty: commentFromDb.someOtherPropertyFromDb }; }); } } const allCommentsFromDb: CommentFromDb[] = [ {commentId: 5, parentId: 2, someOtherPropertyFromDb: 'comment5'}, {commentId: 4, someOtherPropertyFromDb: 'root comment4'}, {commentId: 3, parentId: 1, someOtherPropertyFromDb: 'comment3'}, {commentId: 2, parentId: 1, someOtherPropertyFromDb: 'comment2'}, {commentId: 1, someOtherPropertyFromDb: 'root comment1'}, ]; const commentsTree = CommentsToTree.getTree(allCommentsFromDb);
P.S. не знаю чи відомий спосіб я використовую для побудови дерева, але я його намацав методом тику.
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів