Быстро, легко, без зависимостей: библиотека функций для обработки данных в виде древовидной структуры.
Основные возможности:
Доступ к национальному зеркалу: https://gitee.com/zhengxs2018/js.tree
$ npm i @zhengxs/js.tree --save
import { toTree } from '@zhengxs/js.tree'
toTree([
{ id: 10000, parentId: null, title: 'Заголовок 1' },
{ id: 20000, parentId: null, title: 'Заголовок 2' },
{ id: 11000, parentId: 10000, title: 'Заголовок 1-1' },
])
// ->
// [
// {
// id: 10000,
// parentId: null,
// title: 'Заголовок 1',
// children: [
// { id: 11000, parentId: 10000, title: 'Заголовок 1-1', children: [] }
// ]
// },
// { id: 20000, parentId: null, title: 'Заголовок 2', children: [] },
// ]
Поддерживает данные с произвольными полями отношений.
import { toTree, ROOT_ID } from '@zhengxs/js.tree'
const data = [
{ uid: 10000, pid: null, title: 'Заголовок 1', sort: 1 },
{ uid: 20000, pid: null, title: 'Заголовок 2', sort: 2 },
{ uid: 11000, pid: 10000, title: 'Заголовок 1-1', sort: 3 },
]
const result = toTree(data, {
// Если parentId равен null или undefined, они объединяются вместе
// Используется ROOT_ID в качестве ключа для сохранения
// Поддерживает функции, динамические возвраты
root: ROOT_ID,
// Версия lodash, поддерживает путь, например nested.id
idKey: 'uid', // Необязательно, по умолчанию: id
// Версия lodash, поддерживает путь, например nested.parentId
parentKey: 'pid', // Необязательный, по умолчанию parentId
// Атрибут, который будет добавлен к дочерним элементам, по умолчанию children
childrenKey: 'items',
// Обработка перед добавлением данных в массив children, необязательно
transform(data) {
``` ```
// Используем неглубокое копирование, чтобы избежать изменения исходных данных
// Здесь можно динамически добавлять атрибуты
return { ...данные, проверено: false }
},
// Управляем вставкой действий
вставить(братья, узел) {
// ps: данные любого уровня обрабатываются таким образом
const индекс = братья.findIndex((n) => n.сортировка > узел.сортировка)
если (индекс === -1) {
братья.push(узел)
} еще {
братья.splice(индекс, 0, узел)
}
}
})
// ->
// [
// {
// uid: 10000,
// pid: null,
// заголовок: 'Заголовок 1',
// сортировка: 1,
// проверено: false,
// элементы: [
// {
// uid: 11000,
// pid: 10000,
// заголовок: 'Заголовок 1-1',
// сортировка: 3,
// проверено: false,
// элементы: []
// }
// ]
// },
// {
// uid: 20000,
// pid: null,
// заголовок: 'Заголовок 2',
• сортировка: 2,
• проверено: false,
• элементы: []
}
]
TypeScript
Встроенные типы TS
импорт { toTree } из '@zhengxs/js.tree'
// Данные перед преобразованием
тип MenuItem = {
id: строка
parentId: строка
текст: строка
url?: строка
}
// Преобразованные данные
интерфейс Nav расширяет MenuItem {
элементы: Nav[]
}
// Если вы изменили childrenKey
// Чтобы тип подсказки был правильным, вы можете передать правильный тип
toTree<Nav>(источник, {
childrenKey: 'элементы',
})
Объяснение для разных версий сборки
Модуль UMD использует
es5
, другие версии используютes2015
.
В каталоге dist/ пакета вы найдёте множество различных версий сборки, здесь перечислены их различия:
UMD | CommonJS | ES Module | |
---|---|---|---|
Без зависимостей | js.tree.js | js.tree.common.js | js.tree.esm.js |
Без зависимостей (производственная среда) | js.tree.min.js | ||
Включает модуль lodash | js.tree.common.lodash.js | js.tree.esm.lodash.js | |
Включает модуль lodash-es | js.tree.esm.lodash-es.js |
Чтобы уменьшить размер пакета и поделиться модулем lodash с проектом, он включён по умолчанию.
Но не все проекты будут его импортировать, поэтому по умолчанию он не включён.
Прочее
Лицензия
— MIT
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )