js合并数据递归格式,[{id: 2, parentId: 1},{id: 1}]

//初始数据
var data = [
  {id: 2, parentId: 1},
  {id: 1},
  {id: 3, parentId: 2},
  {id: 5, parentId: 4},
  {id: 4},
]
//处理后的数据
/*[
  {
    id: 1,
    child: [{
        id: 2, 
        parentId: 1, 
        child: [{
            id: 3,
            parentId: 2
        }]
    }]
 },
  {id: 4, child: [{id: 5, parentId: 4}]},
]*/
function returnData(arr){
	//初始没有上级的数据和
	let parents = arr.filter( item => !item.parentId)
	//初始有上级的数据和
	let childs = arr.filter(item => item.parentId)
	//递归处理数据
	function newData(parents,childs){
		parents.forEach( (item,index) => {
			childs.forEach( (child,childIndex) => { 
				if(item.id === child.parentId){
					let newChilds = JSON.parse(JSON.stringify(childs))
					newChilds.splice(childIndex,1) //删除已经存在的数据
					item.childs = item.childs ? item.childs.push(child) : [child]
					newData( [child] , newChilds )
				}else{
					return false
				}
			})
		})
	}
	newData( parents , childs )
	return parents
}
let a = []
console.log(a = returnData(data))



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值