1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zhengxs2018-js.tree

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Быстро, легко, без зависимостей: библиотека функций для обработки данных в виде древовидной структуры.

Основные возможности:

  • Циклическое решение проблемы преобразования строк в дерево.
  • Преобразование в дерево добавляет только атрибут «children», не изменяя другие данные.
  • Поддержка любых полей отношений, таких как «id», «parentId» и «children».
  • Возможность управления процессом вставки элементов, например, настройка порядка вставки.
  • Динамический экспорт узлов дерева.
  • Встроенные функции «filter» и «map».

Быстрый старт

Доступ к национальному зеркалу: https://gitee.com/zhengxs2018/js.tree

Документация

  • Преобразование:
    • toTree: преобразование строк в дерево (./docs/transform/toTree.md).
    • toRows: преобразование дерева в строки (./docs/transform/toRows.md).
  • Операции:
    • map: изменение содержимого (./docs/operators/map.md).
    • each: цикл по содержимому (./docs/operators/each.md).
    • filter: фильтрация содержимого (./docs/operators/filter.md).
    • exclude: исключение содержимого (./docs/operators/exclude.md).
    • repairWith: восстановление связей (./docs/operators/repairWith.md).
  • Вторичное использование: пользовательские настройки (./docs/advanced/custom.md).

Установка

$ 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Один цикл решает проблему преобразования строк в деревья, быстро, легко, без зависимостей. Расширить Свернуть
TypeScript и 2 других языков
MIT
Отмена

Обновления (1)

все
ice

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/zhengxs2018-js.tree.git
git@gitlife.ru:oschina-mirror/zhengxs2018-js.tree.git
oschina-mirror
zhengxs2018-js.tree
zhengxs2018-js.tree
main