2016-12-02 3 views
0

저는 Jquery를 처음 사용했습니다. 누구든지 나를 도울 수 있거나이를 처리하는 방법을 말해 줄 수 있습니다. 다른 예제로 시도했지만 결과는 얻지 못했습니다. 사전에중첩 된 Json 데이터에 대한 Json 데이터

이 같은 중첩 된 데이터에이 JSON 데이터를 변환 할 필요가
var arr = [ 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Delete" } 
      ], 

,

[{ 
    text: "Resource Management", 
    items: [{ 
     text: "Manpower",   
     items: [{ 
      text: "Update", 
     }, { 
      text: "Delete", 
     }, { 
      text: "Insert", 
     }, { 
      text: "View", 
     }] 
    }, { 
     text: "Vehicles", 
     items: [{ 
      text: "Update", 
     }, { 
      text: "Delete", 
     }, { 
      text: "Insert", 
     }, { 
      text: "View", 
     }] 
    }]   
}, { 
    text: "Contacts", 
    items: [{ 
     text: "Manage Customers", 
     items: [{ 
      text: "Update", 
     }, { 
      text: "Delete", 
     }, { 
      text: "Insert", 
     }, { 
      text: "View", 
     }] 
    }] 
}] 

감사합니다! 제발 도와주세요. (조금 원시적 인, 더 나은 솔루션을 환영합니다) 순수 JS에서

<script type="text/javascript"> 
    'use strict'; 

    var arr = [ 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Delete" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Update" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "View" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Insert" }, 
      { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Delete" } 
      ]; 

    function getOrCreateListItem(list, searchItemName) 
    { 
     var newItem = null; 

     //Get item if it's already in the list 
     for (var item of list) { 
      if (item.text == searchItemName) { 
       newItem = item; 
       break; 
      } 
     } 

     //If no item found, create new item 
     if (!newItem) { 
      list.push({ 
       text: searchItemName, 
       items: [] 
      }); 
      newItem = list[list.length-1]; 
     } 

     return newItem; 
    } 

    var newData = []; 

    for (var item of arr) { 

     //Get parent item 
     var parent = getOrCreateListItem(newData, item.PARENTNODE); 

     //Get child item 
     var child = getOrCreateListItem(parent.items, item.CHILDNODE); 

     //Add child item data 
     child.items.push({text: item.OPERATIONNAME}); 
    } 

    console.log(newData); 

</script> 
+3

당신이 지금까지 아무것도 시도? – Hiral

+0

기준별로 그룹을 설명 할 수 있습니까? – GiuServ

답변

0
아니 가장 우아한 해결책

,하지만 출발점

var arr = [ 
    { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Update" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "View" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "ManPower", OPERATIONNAME: "Delete" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Manpower", OPERATIONNAME: "Insert" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Update" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "View" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Insert" }, 
    { PARENTNODE: "Resource Management", CHILDNODE: "Vehicles", OPERATIONNAME: "Delete" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Update" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "View" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Insert" }, 
    { PARENTNODE: "Contacts", CHILDNODE: "Customers", OPERATIONNAME: "Delete" } 
]; 

var output = []; 

arr.forEach(function(item) { 
    var indexParentNode = addItem(item.PARENTNODE, output); 
    var indexChildNode = addItem(item.CHILDNODE, output[indexParentNode].items); 
    addItem(item.OPERATIONNAME, output[indexParentNode].items[indexChildNode].items, true); 
}); 

function addItem(item, arr, withNoItems) { 
    var index = indexOf(item, arr); 
    var tpl = {text: item, items: []}; 

    if (!! withNoItems) delete tpl.items; 

    if (index === -1) { 
     arr.push(tpl); 
     return arr.length - 1; 
    } 
    else { 
     return index; 
    } 
} 

function indexOf(needle, haystack) { 
    var i = 0; 

    while (i < haystack.length) { 
     if (haystack[i].text === needle) return i; 
     i++; 
    } 

    return -1; 
} 

console.log(output); 
+0

감사합니다 @nerdword, 자식 노드 항목에서 작업 이름을 가져 오는하지만 부모 노드 항목 밖에 자식 노드를 가져 오는 중입니다. –

+0

@RaviKumar 코드 샘플을 주로 객체 대신 배열로 작업하도록 변경했습니다 (수동으로 검색하여 목록의 기존 항목을 찾습니다). 이것은 당신에게 훨씬 더 가까운 결과를 줄 것입니다. – Nerdwood