주의
이 저장소는 더 이상 유지 관리되지 않습니다. 대안에 대해서는 아래 섹션을 고려하십시오.
ID 및 상위 ID가있는 항목 배열을 성능있는 방식으로 중첩 트리로 변환합니다 (시간 복잡성 O(n) ). 브라우저와 노드에서 실행됩니다.
다른 패키지에는 더 엄격한 가정이 있거나 중첩 루프 나 재귀를 사용하기 때문에 성능이 없습니다. 예를 들어:
O-unflatten은 부모 노드가 항상 자녀보다 먼저 오도록 입력을 주문해야합니다. 플랫 트리는 2 개의 중첩 루프 (시간 복잡성 O(n^2) )를 사용합니다.
이 구현에는 입력 배열의 항목 순서가 필요하지 않으며 런타임 성능에 중점을 둡니다. 4 개의 다른 패키지 중에서 가장 빠르며 여기에서 벤치 마크를 찾을 수 있습니다. 인덱스와 단일 루프 (시간 복잡성 O(n) )을 사용합니다. StackoverFlow에 대한이 토론에서 영감을 얻었습니다.
yarn add performant-array-to-tree
또는 NPM을 사용하는 경우
npm install --save performant-array-to-tree
const tree = arrayToTree ( [
{ id : "4" , parentId : null , custom : "abc" } ,
{ id : "31" , parentId : "4" , custom : "12" } ,
{ id : "1941" , parentId : "418" , custom : "de" } ,
{ id : "1" , parentId : "418" , custom : "ZZZz" } ,
{ id : "418" , parentId : null , custom : "ü" } ,
] ) ;다음 배열이 발생합니다.
[
{
data : { id : "4" , parentId : null , custom : "abc" } ,
children : [
{ data : { id : "31" , parentId : "4" , custom : "12" } , children : [ ] } ,
] ,
} ,
{
data : { id : "418" , parentId : null , custom : "ü" } ,
children : [
{ data : { id : "1941" , parentId : "418" , custom : "de" } , children : [ ] } ,
{ data : { id : "1" , parentId : "418" , custom : "ZZZz" } , children : [ ] } ,
] ,
} ,
] ; 구성 옵션으로 ArrayTotree에 대한 두 번째 인수를 제공 할 수 있습니다. 지금은 다음을 설정할 수 있습니다.
id : 항목의 ID 필드의 키. 중첩 특성 (예 : "nested.parentId" )과도 작동합니다. 기본값 : "id" .parentId : 항목의 부모의 ID 필드의 키. 중첩 특성 (예 : "nested.parentId" )과도 작동합니다. 기본값 : "parentId" .nestedIds : 중첩 된 ID를 활성화/비활성화하는 옵션. 기본값 : true .childrenField : 키. 기본값 : "children"dataField : 원래 항목의 모든 속성/데이터를 포함하는 키. 컨테이너를 원하지 않으면 null로 설정하십시오. 기본값 : "data"throwIfOrphans : 오류를 던지는 옵션 항목 배열에 배열에 부모가없는 하나 이상의 항목이 포함되거나 항목 배열에 순환 부모/자식 관계가있는 항목이 포함 된 경우. 이 옵션에는 작은 런타임 페널티가 있으므로 기본적으로 비활성화됩니다. 활성화되면이 기능은 항목 배열에서 찾을 수없는 부모가 포함 된 오류 또는 원형 항목 관계 만 일반적인 오류를 제공합니다. 트리의 노드 수가 원래 배열의 노드 수보다 작은 경우 기능에 오류가 발생합니다. 비활성화되면 기능은 고아와 순환 관계를 무시하고 나무에 추가하지 않습니다. 기본값 : falserootParentIds : 부모 ID를 키로 키우고 트리의 상단 또는 루트 요소로 간주되어야하는 값으로 true . 이것은 당신의 트리가 전체 트리의 서브 세트 일 때 유용합니다. 즉, 부모 ID가 undefined , null 또는 '' 중 하나 인 항목이 없음을 의미합니다. 전달하는 배열은 기본값을 대체합니다. undefined 및 null 항상 루트 파렌티드로 간주됩니다. 자세한 내용은 #23을 참조하십시오. 기본값 : {'': true}assign : dataField 가 null 이면 트리에 항목을 생성하도록 스프레드 연산자 대신 Object.assign 사용할 수있는 옵션. 품목에 보수해야 할 프로토 타입이있는 경우 유용합니다. 활성화되고 dataField null 인 경우 원래 노드 항목이 사용되며 해당 필드의 세터를 호출하여 children 속성이 할당됩니다. dataField null 아닌 경우이 옵션은 새로운 객체의 dataField 에서 원래 노드가 사용 되므로이 옵션은 효과가 없습니다. 이를 활성화 해야하는지 확실하지 않은 경우, 비활성화하는 것이 좋습니다. 기본값 : false예:
const tree = arrayToTree (
[
{ num : "4" , ref : null , custom : "abc" } ,
{ num : "31" , ref : "4" , custom : "12" } ,
{ num : "1941" , ref : "418" , custom : "de" } ,
{ num : "1" , ref : "418" , custom : "ZZZz" } ,
{ num : "418" , ref : null , custom : "ü" } ,
] ,
{ id : "num" , parentId : "ref" , childrenField : "nodes" }
) ;생산 :
[
{
data : { num : "4" , ref : null , custom : "abc" } ,
nodes : [ { data : { num : "31" , ref : "4" , custom : "12" } , nodes : [ ] } ] ,
} ,
{
data : { num : "418" , ref : null , custom : "ü" } ,
nodes : [
{ data : { num : "1941" , ref : "418" , custom : "de" } , nodes : [ ] } ,
{ data : { num : "1" , ref : "418" , custom : "ZZZz" } , nodes : [ ] } ,
] ,
} ,
] ;데이터 필드가없는 예 :
const tree = arrayToTree (
[
{ id : "4" , parentId : null , custom : "abc" } ,
{ id : "31" , parentId : "4" , custom : "12" } ,
{ id : "1941" , parentId : "418" , custom : "de" } ,
{ id : "1" , parentId : "418" , custom : "ZZZz" } ,
{ id : "418" , parentId : null , custom : "ü" } ,
] ,
{ dataField : null }
) ;생산 :
[
{
id : "4" ,
parentId : null ,
custom : "abc" ,
children : [ { id : "31" , parentId : "4" , custom : "12" , children : [ ] } ] ,
} ,
{
id : "418" ,
parentId : null ,
custom : "ü" ,
children : [
{ id : "1941" , parentId : "418" , custom : "de" , children : [ ] } ,
{ id : "1" , parentId : "418" , custom : "ZZZz" , children : [ ] } ,
] ,
} ,
] ;중첩 된 ID/ParentID 속성이있는 예 :
const tree = arrayToTree (
[
{ num : { id : "4" } , parent : { parentId : null } , custom : "abc" } ,
{ num : { id : "31" } , parent : { parentId : "4" } , custom : "12" } ,
] ,
{ id : "num.id" , parentId : "parent.parentId" }
) ;생산 :
[
{
data : { num : { id : "4" } , parent : { parentId : null } , custom : "abc" } ,
children : [
{
data : { num : { id : "31" } , parent : { parentId : "4" } , custom : "12" } ,
children : [ ] ,
} ,
] ,
} ,
] ; 이 프로젝트에는 유형이 포함되어 있으며 평소와 같이 모듈을 가져 오기 만하면됩니다.
import { arrayToTree } from "performant-array-to-tree" ;
const tree = arrayToTree ( array ) ; yarn version 새 버전 생성 npm login npm publish --access public 할 공개 공개