Ubah Array Ratakan menjadi Array Anak Induk Tanpa Informasi Induk apa pun

Saya memiliki masalah untuk mengonversi array rata ke node pohon/array berformat anak induk, saya berpikir untuk menggunakan solusi rekursif tetapi saya masih tidak tahu cara mengimplementasikannya. hal terbaik dapat berguna untuk mengelompokkan daftar yang hanya memanipulasi kode string dari item objek. seperti 01.05 || 01.05.011 || 01.05.011.0001|| 01.05.011.0002|| 01.05.011.0003 tujuan saya hanya ingin mengubah kode tersebut menjadi seperti ini:

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

Bagaimana cara mengatasi masalah ini?


person Teguh Santoso    schedule 18.05.2019    source sumber


Jawaban (1)


Anda dapat membagi string berdasarkan titik dan mengambil setiap bagian sebagai level baru untuk struktur bersarang.

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