chenjianou / blog

我的个人博客
0 stars 0 forks source link

js 数组和树转化 #23

Open chenjianou opened 4 years ago

chenjianou commented 4 years ago

这两天在弄数据库,省市县镇的数据联动,拿到的数据是

{
parentCode: 0,
name: 北京市,
code: 110000,
children: [
parentCode: 110000,
name: 市辖区,
code:110100,
children: []
]

是这样的一个数据结构当我们需要将这样的数据存到数据库我们就需要将这个数据扁平化,在考虑嵌套层级可能是无限级别的,我们这里就比较适合用递归的方式去实现,扁平化

function flatten (pcsa) {
  let res = []
  for (let index = 0; index < pcsa.length; index++) {
    const item = pcsa[index];
    provinceSql.push({
      code: item.code,
      name: item.name,
      parentCode: item.parentCode,
    })
    if (item.children) {
      res = provinceSql.concat(...flatten(item.children))
    }
  }
  return res
}

//然后我们再尝试将数据进行还原
function array2Tree(data, root) {
  let res = []
  data.forEach((item) => {
    if (item.parentCode === root.code) {
      let children = array2Tree(data, item)
      if (children.length) item.children = children
      res.push(item)
    }
  })
  return res
}  
// usage
const res = array2Tree(flatProvince, { code: '0' })

总得来说还是不是很难,但是花了自己两天时间在上面还是简单的记录下。