Bagaimana untuk membina pokok dengan cekap daripada struktur pokok
P粉345302753
P粉345302753 2024-03-28 13:53:08
0
1
396

Saya mempunyai sekumpulan objek dalam struktur pokok. Tetapi pada masa ini struktur ini tidak berfungsi untuk saya kerana saya perlu menggunakan v-teeview jadi saya perlu menstrukturkannya semula...

Struktur pokok saya pada masa ini kelihatan seperti ini:

items: [
  {
    data: [
      { ... },
    ],
    children: [],
  },
  {
    data: [{ ... }],
    children: [{...}, {...}]
   }
] 

Saya perlu menyusun semula sesuatu seperti ini:

  items: [
      {     
         id: 76,
         name: "ADIS ",
         children: [],
      },
      {
        id: 64,
        name: "YSVERIS",
        children: [
          {
            id: 85,
            name: "MERCEDES",
            children: [],
          },
          {
            id: 83,
            name: "YNGRIBEL",  
            children: [],
          },
        ],
      }
    ]

Jadi, saya melaksanakan fungsi rekursif untuk membina semula pokok itu.

Kod dalam

kodkotak pasir:

export default {
  methods: {
    createTree(items) {
      items.forEach((element) => {
        if (element.children.length === 0) {
          this.datatree.push({
            id: element.data[0].id,
            name: element.data[0].name,
            children: [],
          });
        } else {
          this.datatree.push({
            id: element.data[0].id,
            name: element.data[0].name,
            children: this.createTree(element.children),
          });
        }
      });
      console.log("root: ", this.datatree);
    },
  },
  mounted() {
    this.createTree(this.items);
  },
}

Jadi masalah saya sekarang ialah apabila saya membina pokok baru, subpokoknya tidak ditentukan, apakah salah saya?

Dalam kod contoh saya, saya menggunakan console.log() untuk melihat pokok baharu

P粉345302753
P粉345302753

membalas semua(1)
P粉401901266

createTree() 不返回任何内容,因此将返回值分配给 children 只会使 children 具有 undefined Nilai.

Satu penyelesaian adalah dengan memanggil kaedah pembantu secara rekursif (cth. bernama "createNode”),该方法从每个数组元素创建树节点(而不是递归调用 createTree())。返回createTree()的结果,并将返回值赋给datatree:

function createTree(items) {
  const createNode = ({ data, children }) => ({
    ...data[0],
    children: children?.map(child => createNode(child))
  })
  return items.map(item => createNode(item))
}

// MyComponent.vue
export default {
  mounted() {
    this.datatree = createTree(this.items)
  }
}

Demo

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan