博客地址:http://www.globm.top/blog/1/detail/19
在工作的时候需要将带有pid的数据转换成list级联结构,,一直都没有找到太好的工具函数。偶然间看到了这个函数,研究了下,感觉这个函数很强大,所以记录下来,作为备用,同时也贴出来,供大家使用;
transData (a, idStr, pidStr, childStr) {
const r = []
const hash = {}
const id = idStr
const pid = pidStr
const children = childStr
let i = 0
let j = 0
const len = a.length
for (; i < len; i++) {
hash[a[i][id]] = a[i]
}
for (; j < len; j++) {
const aVal = a[j]
const hashVP = hash[aVal[pid]]
if (hashVP) {
!hashVP[children] && (hashVP[children] = [])
hashVP[children].push(aVal)
} else {
r.push(aVal)
}
}
return r
}
/**
* json格式转树状结构
* @param {json} json数据
* @param {String} id的字符串
* @param {String} 父id的字符串
* @param {String} children的字符串
* @return {Array} 数组
*/
const arr1 = this.transData(arr, 'id', 'pid', 'children')
console.log(arr1)