계층 적 JSON / JS 데이터를 반복하는 가장 좋은 방법

API

나는 이것의 다양한 구현과 함께 몇 가지 성능 문제를 겪고 있습니다 ...

기본적으로 아래 형식의 약 1500 개 개체의 데이터 집합이 있습니다.-

  { 
    "Id": "411fc047-9d58-4faf-8da2-dfaf1fc3f3a3", 
    "ParentId": null, 
    "Name": "기본 위치", 
    "Children": [ 
      { 
        "Id": "3cb93d59-613c-4797-8858 -bc3f31f6baa0 ", 
        "ParentId ":"411fc047-9d58-4faf-8da2-dfaf1fc3f3a3 ", 
        "Name ":"Site A ", 
        "Children ": [ 
          { 
            "Id ":"a1fec942-b425-4307-905d-9e2a6f8730b3 " , 
            "ParentId": "3cb93d59-613c-4797-8858-bc3f31f6baa0", 
            "Name": "Location A1", 
            "Children":[ 
              { 
                "이름": "위치 A1 a", 
                "Id": "5538e976-db1c-49c2-8cab-70aafc1e4e70",
                "ParentId": "a1fec942-b425-4307-905d-9e2a6f8730b3", 
          {
                "Children": [] 
              }, 
              { 
                "Id": "6f5a536f-4b4f-4a10-b7ba-657d772d0588", 
                "ParentId": "a1fec942-b425-4307-905d-9e2a6f8730b3", 
                "Name": "Location A1 b" , 
                "하위 항목": [] 
              } 
            ] 
          } 
        ] 
      }, 
      { 
        "Id": "319db987-994d-45d5-9023-8f21b8a589cb", 
        "ParentId": "411fc047-9d58-4faf-8da2-dfaf1fc3f3a3", 
        "이름": "사이트 B", 
        "하위":[ 
            "Id": "f0c1f222-4118-4c07-b7be-30ff70fada03",
            "ParentId": "319db987-994d-45d5-9023-8f21b8a589cb", 
            "Name": "Location B1", 
            "Children": [ 
              { 
                "Id": "fe33043d-4cf2-498e-aa80-04848e109acb", 
                "ParentId" : "f0c1f222-4118-4c07-b7be-30ff70fada03", 
                "Name": "Location B1 b", 
                "Children": [] 
              }, 
              { 
                "Id": "d92ae7d5-bc44-4e94-be75-0cda5a254664", 
                "ParentId ":"f0c1f222-4118-4c07-b7be-30ff70fada03 ", 
                "이름 ":" 
                    "Id ":"0a89ee4a-3b18-4772-baa3-fc0682d7053f ", 
                "하위 ": [
                  { 
                    "ParentId": "d92ae7d5-bc44-4e94-be75-0cda5a254664", 
                    "이름": "위치 B1 b 특수 사이트 ...", 
                    "하위 항목": [] 
                  } 
                ] 
              } 
            ] 
          } 
        ] 
      } 
    ] 
  } 
]

아이들이 각 물체에 계속 존재할 수 있기 때문에 그것은 알려지지 않은 깊이를 가지고 있습니다.

첫째, Id (GUID)가 주어진 개체 중 하나를 찾기 위해 이것을 검색하는 가장 빠른 방법이 무엇인지 알고 싶습니다. 나는 모든 종류를 시도했고, 그것을 평평하게 만들고 ES6 .find () (단일 결과에 대한 필터 대신 ...)를 사용하여 실험했으며 본질적으로 맨 위에서 시작하여 작동하는 사용자 지정 반복기를 작성했습니다. 일치가 발견 될 때까지 아이들을 통해…이 해결책은 작동한다, 나는 다만 내가 놓친 트릭이 있는지 궁금하다 ..?

  • 이 속도가 느려지는 영역 중 하나는 찾은 객체에서 트리를 오르고 싶다면 .find () 접근 방식을 사용하고 모든 부모를 알고 싶다면 각 부모도 find ()해야합니다. ParentId를 기반으로 ...

둘째, 이제 이것은 아마도 약간의 고유 한 사용 사례이지만 본질적으로 JS에서 사용자 정의 된 React Treeview를이 데이터로 채우고 트 리뷰에서 각 항목에는 확인란이 있습니다 ... 사용자가 상자를 선택하면 I 선택된 항목과 선택되지 않은 항목을 추적하기 위해 '선택된'배열에 개체 ID 속성을 추가합니다.

이것이 복잡해지면 그 위에있는 모든 상위 항목을 선택하고 싶지는 않지만 대신 해당 ID를 알고 있어야 '부분적으로 선택된'배열에 저장하여 Treeview에 설명 할 수 있습니다. t가 선택되었지만 어딘가에 하위 항목이 있습니다 ... (선택됨 또는 '부분적으로 선택됨'확인란인지 여부에 따라 확인란의 스타일을 조건부로 변경합니다 ...

사용자가 트리 중간에 3 개 또는 4 개의 체크 박스 만 선택하면 모든 하위 항목도 확인할 수 있으므로 속도 저하가 발생하는 핵심 영역입니다.이 '부분적으로 선택된'ID는 각 ' 트리에서 완전히 체크 된 항목 ...

말이 되나? :-에스

기본적으로 이런 일을 할 때 사람들이 일반적으로 사용하는 초고속 방법이 있는지, 아니면 그 성격이 느린 지 궁금합니다. 그 이유는 각 경로를 개별적으로 확인하기 만하면되기 때문입니다 ..?

감사!

니나 숄츠

해시 맵을 작성하고 원하는 객체에 빠르게 액세스 할 수 있습니다.

const
    buildHashMap = (r, o) => {
        r[o.Id] = o;
        return o.Children
            ? o.Children.reduce(buildHashMap, r)
            : r;
    },
    data = [{ Id: "411fc047-9d58-4faf-8da2-dfaf1fc3f3a3", ParentId: null, Name: "Main Location", Children: [{ Id: "3cb93d59-613c-4797-8858-bc3f31f6baa0", ParentId: "411fc047-9d58-4faf-8da2-dfaf1fc3f3a3", Name: "Site A", Children: [{ Id: "a1fec942-b425-4307-905d-9e2a6f8730b3", ParentId: "3cb93d59-613c-4797-8858-bc3f31f6baa0", Name: "Location A1", Children: [{ Id: "5538e976-db1c-49c2-8cab-70aafc1e4e70", ParentId: "a1fec942-b425-4307-905d-9e2a6f8730b3", Name: "Location A1 a", Children: [] }, { Id: "6f5a536f-4b4f-4a10-b7ba-657d772d0588", ParentId: "a1fec942-b425-4307-905d-9e2a6f8730b3", Name: "Location A1 b", Children: [] }] }] }, { Id: "319db987-994d-45d5-9023-8f21b8a589cb", ParentId: "411fc047-9d58-4faf-8da2-dfaf1fc3f3a3", Name: "Site B", Children: [{ Id: "f0c1f222-4118-4c07-b7be-30ff70fada03", ParentId: "319db987-994d-45d5-9023-8f21b8a589cb", Name: "Location B1", Children: [{ Id: "fe33043d-4cf2-498e-aa80-04848e109acb", ParentId: "f0c1f222-4118-4c07-b7be-30ff70fada03", Name: "Location B1 b", Children: [] }, { Id: "d92ae7d5-bc44-4e94-be75-0cda5a254664", ParentId: "f0c1f222-4118-4c07-b7be-30ff70fada03", Name: "Location B1 b", Children: [{ Id: "0a89ee4a-3b18-4772-baa3-fc0682d7053f", ParentId: "d92ae7d5-bc44-4e94-be75-0cda5a254664", Name: "Location B1 b Special Site...", Children: [] }] }] }] }] }],
    hashmap = data.reduce(buildHashMap, {});

console.log(hashmap);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

알려진 깊이로 계층 적 데이터를 저장하는 더 좋은 방법은 무엇입니까?

분류에서Dev

jQuery / JS에서 복잡한 HTML 계층 구조를 생성하는 가장 좋은 방법

분류에서Dev

Firebase에 계층 적 데이터를 저장하는 방법

분류에서Dev

복잡한 Java 객체 계층 구조를 안정적으로 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

로깅 데이터를 집계하는 가장 좋은 방법

분류에서Dev

플랫 다중 분기 데이터를 계층 적 JSON으로 변환하는 방법은 무엇입니까?

분류에서Dev

Core Data에 JSON 데이터를 저장하는 가장 좋은 방법

분류에서Dev

계층 형 문서를 DynamoDB에 넣는 가장 좋은 방법 찾기

분류에서Dev

D3.js 비 계층 적 데이터가 포함 된 계층 적 레이아웃을 사용하는 방법

분류에서Dev

Python에서 JSON 데이터를 모델링하는 가장 좋은 방법

분류에서Dev

JSON 데이터를 MYSQL에 삽입하는 가장 좋은 방법

분류에서Dev

노드 js에서 데이터를 캐시하는 가장 좋은 방법

분류에서Dev

Pandas 데이터 프레임 그룹을 반복하고 계층 적 조건을 적용하는 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

경로 문자열에서 계층 적 목록을 작성하는 가장 좋은 방법

분류에서Dev

데이터웨어 하우스 DWH를 설계하는 가장 좋은 방법

분류에서Dev

MVC의 항목 데이터를 계산하는 가장 좋은 방법

분류에서Dev

Swift 5 추가 할 JSON 다중 계층 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

JSON 데이터를 보내는 가장 좋은 방법입니다.

분류에서Dev

node.js를 사용하여 1 초마다 Postgres에 계속 오는 데이터를 저장하는 가장 좋은 방법

분류에서Dev

JS : 반복하여 결과를 필터링하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

Cordova / Phonegap은 많은 데이터를 저장하는 가장 좋고 효율적인 방법입니까?

분류에서Dev

화면에 여러 이미지를 반복적으로로드 / 제거하는 가장 좋은 방법

분류에서Dev

반복적 인 dynamic_cast를 피하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

API에서 데이터를 지속적으로 수집하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

계층 적 데이터를 저장하는 데 가장 적합한 / 실행 가능한 C # 데이터 구조

분류에서Dev

루비 객체를 생성하기 위해 JSON 객체를 반복하는 가장 좋은 방법

분류에서Dev

grails에서 arraylist를 반복하는 가장 좋은 방법

분류에서Dev

이 jquery 데이터를 표시하는 가장 좋은 방법

분류에서Dev

모든 데이터를 반복하는 가장 좋은 방법은 무엇입니까?

Related 관련 기사

  1. 1

    알려진 깊이로 계층 적 데이터를 저장하는 더 좋은 방법은 무엇입니까?

  2. 2

    jQuery / JS에서 복잡한 HTML 계층 구조를 생성하는 가장 좋은 방법

  3. 3

    Firebase에 계층 적 데이터를 저장하는 방법

  4. 4

    복잡한 Java 객체 계층 구조를 안정적으로 저장하는 가장 좋은 방법은 무엇입니까?

  5. 5

    로깅 데이터를 집계하는 가장 좋은 방법

  6. 6

    플랫 다중 분기 데이터를 계층 적 JSON으로 변환하는 방법은 무엇입니까?

  7. 7

    Core Data에 JSON 데이터를 저장하는 가장 좋은 방법

  8. 8

    계층 형 문서를 DynamoDB에 넣는 가장 좋은 방법 찾기

  9. 9

    D3.js 비 계층 적 데이터가 포함 된 계층 적 레이아웃을 사용하는 방법

  10. 10

    Python에서 JSON 데이터를 모델링하는 가장 좋은 방법

  11. 11

    JSON 데이터를 MYSQL에 삽입하는 가장 좋은 방법

  12. 12

    노드 js에서 데이터를 캐시하는 가장 좋은 방법

  13. 13

    Pandas 데이터 프레임 그룹을 반복하고 계층 적 조건을 적용하는 함수를 작성하는 방법은 무엇입니까?

  14. 14

    경로 문자열에서 계층 적 목록을 작성하는 가장 좋은 방법

  15. 15

    데이터웨어 하우스 DWH를 설계하는 가장 좋은 방법

  16. 16

    MVC의 항목 데이터를 계산하는 가장 좋은 방법

  17. 17

    Swift 5 추가 할 JSON 다중 계층 데이터를 얻는 방법은 무엇입니까?

  18. 18

    JSON 데이터를 보내는 가장 좋은 방법입니다.

  19. 19

    node.js를 사용하여 1 초마다 Postgres에 계속 오는 데이터를 저장하는 가장 좋은 방법

  20. 20

    JS : 반복하여 결과를 필터링하는 가장 효율적인 방법은 무엇입니까?

  21. 21

    Cordova / Phonegap은 많은 데이터를 저장하는 가장 좋고 효율적인 방법입니까?

  22. 22

    화면에 여러 이미지를 반복적으로로드 / 제거하는 가장 좋은 방법

  23. 23

    반복적 인 dynamic_cast를 피하는 가장 좋은 방법은 무엇입니까?

  24. 24

    API에서 데이터를 지속적으로 수집하는 가장 좋은 방법은 무엇입니까?

  25. 25

    계층 적 데이터를 저장하는 데 가장 적합한 / 실행 가능한 C # 데이터 구조

  26. 26

    루비 객체를 생성하기 위해 JSON 객체를 반복하는 가장 좋은 방법

  27. 27

    grails에서 arraylist를 반복하는 가장 좋은 방법

  28. 28

    이 jquery 데이터를 표시하는 가장 좋은 방법

  29. 29

    모든 데이터를 반복하는 가장 좋은 방법은 무엇입니까?

뜨겁다태그

보관