树转二维数组的方法

需求如下:

let arr = [
  {
    code: "A001",
    level: 1,
    childs: [
      {
        code: "A002",
        level: 2,
        childs: [
          {
            code: "A005",
            level: 3,
            childs: []
          },
          {
            code: "A006",
            level: 3,
            childs: []
          }
        ]
      },
      {
        code: "A003",
        level: 2,
        childs: []
      },
      {
        code: "A004",
        level: 2,
        childs: []
      }
    ]
  }
];

将上面的数据转换为二维数组:

[
    [
       { code: "A001", level: 1 },
       { code: "A002", level: 2 },
       { code: "A005", level: 3 },
    ],
    [
       { code: "A001", level: 1 },
       { code: "A002", level: 2 },
       { code: "A006", level: 3 },
    ],
    [
       { code: "A001", level: 1 },
       { code: "A003", level: 2 }
    ],
    [
       { code: "A001", level: 1 },
       { code: "A004", level: 2 }
    ]
]

方法:

function traverse (tree, path = [], result = []) {
  if (!tree) return []
  for (const data of tree) {
    path.push({ level: data.level, code: data.code })
    let isLeaf = !data.childs || !data.childs.length
    isLeaf ? result.push([...path]) : traverse(data.childs, path, result)
    path.pop()
  }
  return result
}

原文地址:https://www.cnblogs.com/evilr/p/12024081.html

时间: 2024-11-09 05:27:12

树转二维数组的方法的相关文章

二维数组与方法(函数)

二维数组 什么是二维? ? 比如(合金弹头.超级玛丽) ? 二维数组里面放一维数组. 什么是二维数组? ? 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”, ? 二维数组又称为矩阵,行列数相等的矩阵称为方阵 怎么创建一个二维数组? 数据类型[][] 对象名 = new 数据类型[x][y]; x代表行 y代表列 例如:  int [ ][ ] a = new int [2] [2]; 数组 : 使用索引来操作元素, 下面给二维数组赋值 a[0] [0] = 1; //第一行第一列 a

ThinkPHP的cookide保存二维数组的方法

ThinkPHP中的cookie是不支持二维数组的. 如果要保存二维数组.只能特殊处理 $data[263] = array('gid'=>263,'num'=>1); $data[266] = array('gid'=>266,'num'=>1); $data[267] = array('gid'=>267,'num'=>5); $data = serialize($data); //序列化二维数组 cookie('studyfox_shopping_cart',$d

二维数组去重方法

<?php function unique_arr($array2D,$stkeep=false,$ndformat=true) { // 判断是否保留一级数组键 (一级数组键可以为非数字) if($stkeep) $stArr = array_keys($array2D); // 判断是否保留二级数组键 (所有二级数组键必须相同) if($ndformat) $ndArr = array_keys(end($array2D)); //降维,也可以用implode,将一维数组转换为用逗号连接的字

java JNI 二维数组作为方法参数传递给本地

java里面有如下本地定义: private static native int setFilter(final int fd, final int[][] array_filter); c++中对应的函数如下: JNIEXPORT jint JNICALL Java_JniSocketCan_setFilter  (JNIEnv *env, jclass obj, jint fd, jobjectArray array_filter){    struct can_filter *pFilte

python 创建二维数组的方法

废话不多说,直接上代码: #coding=utf-8 def two_di_demo1(): a=[] for i in range(10): a.append([]) for j in range(10): a[i].append(0) print(a) def two_di_demo2(): a=[] for i in range(10): a.append([]) for j in range(10): a[i].append(0) print(a) b = [[0] * 10] * 10

环形二维数组

一.题目 输出二维环形数组中最大子数组和 二.设计思想 把解决一维环形数组,和普通二维数组的方法结合起来街是解决二维环形数组的方法. 三.源代码 #include<iostream.h> #include<time.h> #include<stdlib.h> int qiumax(int arry[],int max) { int i; long sum; for(i=0;i<5;i++) { for(i=0;i<5;i++) { arry[i+5]=arr

二维数组指针及二维动态数组的分配问题

在我以前的文章中都有讲过关于数组指针及指针数组的相关问题,但是讲得不够深入,我后来后了别人写的博客后觉得人家的确实写得好, 也学到了不少东西,对以前的问题有深的领悟了,于是准备结合这些博客和文章再稍微深入一点讲讲这些问题.这些指针的问题是C语言中的基础与关键 而且一旦出现这些问题,不太好找bug的来源,有时候不得不借助反汇编. 参考文章: http://c.biancheng.net/cpp/html/476.html       C语言指针数组和数组指针 http://blog.csdn.ne

JAVA遍历二位数组的方法

//使用方法对于二维数组进行遍历 package com; import java.util.Arrays; public class CompoundInterest { public static void main(String[] args) { // TODO Auto-generated method stub double[][] balances= new double[3][3]; for(int j = 0; j < balances[0].length; j++){ bal

c++动态二维数组(原地址:http://blog.sina.com.cn/s/blog_4e7ae8ca0100zqq6.html)

C++中用new动态创建二维数组的格式一般是这样: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数.采用这种格式,列数必须指出,而行数无需指定.在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针. 还有一种方法,可以不指定数组的列数: int **p;p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组for (int i = 0; i != 10; ++i){    p[