แปลง Flatten Array เป็น Parent Child Array โดยไม่มีข้อมูล Parent

ฉันมีปัญหาในการแปลงอาเรย์แบบราบเป็นทรีโหนด/อาเรย์ที่จัดรูปแบบพาเรนต์ไชด์ ฉันคิดว่าจะใช้วิธีแก้ปัญหาแบบเรียกซ้ำ แต่ฉันยังไม่รู้วิธีใช้งาน สิ่งที่ดีที่สุดอาจมีประโยชน์สำหรับการจัดกลุ่มรายการซึ่งเป็นเพียงการจัดการโค้ดสตริงจากรายการอ็อบเจ็กต์เท่านั้น เช่น 01.05 || 01.05.011 || 01.05.011.0001|| 01.05.011.0002|| 01.05.011.0003 เป้าหมายของฉันคือต้องการแปลงโค้ดเหล่านั้นให้เป็นดังนี้:

{
  code: 01,
  child: [
     code : 05,
       child: [{
          code: 011,
          child: [
             {
               code: 0001,
               child:[]
             },
             {
               code: 0002,
               child:[]
             },
              {
               code: 0003,
               child:[]
             }
           ]
       }]
  ]
}

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


person Teguh Santoso    schedule 18.05.2019    source แหล่งที่มา


คำตอบ (1)


คุณสามารถแยกสตริงด้วยจุดและแยกแต่ละส่วนเป็นระดับใหม่สำหรับโครงสร้างที่ซ้อนกัน

var array = ['01.05', '01.05.011', '01.05.011.0001', '01.05.011.0002', '01.05.011.0003'],
    result = array.reduce((r, s) => {
        s
            .split('.')
            .reduce((children, code) => {
                var temp = children.find(o => o.code === code);
                if (!temp) children.push(temp = { code, children: [] });
                return temp.children;
            }, r);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

person Nina Scholz    schedule 18.05.2019