Computer >> Máy Tính >  >> Lập trình >> Javascript

Xây dựng mảng cây từ JSON trong JavaScript

Giả sử, chúng ta có mảng sau trong JavaScript -

 const arr =[{"code":"2", "name":"PENDING"}, {"code":"2.2", "name":"PENDING CHILDREN"}, {"code":" 2.2.01.01 "," name ":" PENDING TRẺ EM "}, {" code ":" 2.2.01.02 "," name ":" PENDING TRẺ EM02 "}, {" code ":" 1 "," name " :"ACTIVE"}, {"code":"1.1", "name":"ACTIVE TRẺ EM"}, {"code":"1.1.01", "name":"ACTIVE TRẺ EM"}];  

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng như vậy. Hàm phải xây dựng một cấu trúc cây từ mảng này dựa trên thuộc tính "name" của các đối tượng.

Do đó, đối với mảng trên, đầu ra sẽ giống như thế này -

 const output =[{"code":"2", "name":"PENDING", "children":[{"code":"2.2", "name":"PENDING TRẺ EM", "children" :[{"code":"2.2.01.01", "name":"PENDING TRẺ EM"}, {"code":"2.2.01.02", "name":"PENDING TRẺ EM02"}]}]}, {"code":"1", "name":"ACTIVE", "children":[{"code":"1.1", "name":"ACTIVE CHILDREN", "children":[{"code":"1.1.01", "name":"TRẺ HỌC SINH HOẠT ĐỘNG"}]}]}]; 

Ví dụ

Mã cho điều này sẽ là -

 const arr =[{"code":"2", "name":"PENDING"}, {"code":"2.2", "name":"PENDING CHILDREN"}, {"code":" 2.2.01.01 "," name ":" PENDING TRẺ EM "}, {" code ":" 2.2.01.02 "," name ":" PENDING TRẺ EM02 "}, {" code ":" 1 "," name " :"ACTIVE"}, {"code":"1.1", "name":"ACTIVE CHILDREN"}, {"code":"1.1.01", "name":"ACTIVE CHILDREN CHILDREN"}]; const biến đổi =(arr, root ='') => {let map ={}, last =[root], level =0; bản đồ [root] ={}; arr.forEach (el => {let parent =root; while (level &&last [level] .length> =el.code.length) {level--;}; parent =last [level]; level ++; last.length =level; last.push (el.code); map [el.code] =el; map [cha] .children =map [cha] .children || []; map [cha] .children.push (el);}); return map [root] .children;}; console.log (JSON.stringify (biếnToTree (arr), undefined, 4)); 

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

 [{"code":"2", "name":"PENDING", "children":[{"code":"2.2", "name":"PENDING CON", "children":[{ "code":"2.2.01.01", "name":"PENDING TRẺ EM"}, {"code":"2.2.01.02", "name":"PENDING TRẺ EM02"}]}]}, {"mã ":" 1 "," name ":" ACTIVE "," children ":[{" code ":" 1.1 "," name ":" ACTIVE CHILDREN "," children ":[{" code ":" 1.1. 01 "," name ":" TRẺ EM CHỦ ĐỘNG "}]}]}]