js压栈简单写一个数据节构转换

原数据结构:

list: [
  {
    columns: [
      {
        key: '4',
        name: '结束时间',
        field: 'end_time'
      },
      {
        list: [
          {
            key: '6',
            name: '创建人',
            field: 'create_user'
          }
        ],
        key: '5'
      }
    ],
    key: '1'
  },
  {
    key: '2',
    name: '项目名称',
    field: 'project_name'
  },
  {
    list: [
      {
        key: '3',
        name: '创建时间',
        field: 'create_time'
      }
    ]
  }
]

需要将其中任何层级中的 name,field单独全部取出来
转换后:

[
  {
    name:'结束时间',
    field:'end_time'
  },
  {
    name:'创建人',
    field:'create_user'
  }
  .......
]

以往这种我都会使用递归来完成,但是递归是重复调用函数自身,而调用函数对于时间和空间的消耗是比较大的,每次调用函数,都要在内存栈中分配空间来保存参数、返回地址以及变量,调用过多的话甚至会导致栈溢出
所以这次就利用压栈算法完成
思路:
首先创建一个栈节构(容器),遇到满足条件的数据,则压入栈,再从头部依次出栈,等栈中数据清空时,也代表着数据已梳理完毕

findModel (param) {
      // 创建栈容器
      const stack = [...param]
      // 最终处理过数据的集合
      const newArray = []
      while (stack.length) {
        // 出栈
        const item = stack.shift()
        if (item.columns || item.list) {
          const itemList = item.columns || item.list
          // 压栈
          stack.push(...itemList)
        } else {
          newArray.push(
            {
              field: item.model,
              label: item.name,
              condition: ''
            }
          )
        }
      }
      return newArray
    },

这只是一个比较简单的数据结构转换的算法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值