js 格式化树形数据

14 篇文章 0 订阅

优化版(新)

tabledata = flatten(d.data.rows);
// 扁平化树形数据
function initData(arr, item) {
    var rows = item.rows;
    var obj = {
        id: item.id,
        isInternal: item.isInternal,
        isExternal: item.isExternal,
        isFocused: item.isFocused,
        name: item.name,
        parentId: item.parentId
    }
    return arr.concat([obj], flatten(rows))
}

function flatten(data) {
    console.log("flatten",data)
    return data.reduce(initData, [])
}

需要格式的数据

d={
	"status": "base-0001",
	"msg": "success",
	"data": [{
		"id": 1,
		"code": "001",
		"name": "工程",
		"sortNum": 1,
		"parentId": 0,
		"skillId": "",
		"level": 1,
		"list": [{
				"id": 3,
				"code": "001",
				"name": "水电",
				"sortNum": 1,
				"parentId": 1,
				"skillId": 1,
				"level": 2
			},
			{
				"id": 4,
				"code": "001",
				"name": "煤气",
				"sortNum": 2,
				"parentId": 1,
				"skillId": 2,
				"level": 2
			}
		]
	}]
}

一、通用

//调用
var data=getArray(d.data,"list");
// 格式化树形数据
function getArray(data, child) { //参数data:要格式化的数据,child为要格式化数据的子数组值名
    var trees = new Array();
    var fn;
    for (var i in data) {
        var newData = {
            "id": data[i].id,
            "value": data[i].name?data[i].name:"未命名",
            "childs": []
        }
        trees.push(newData);
        fn = getArray(data[i][child], child);
        if (data[i][child]) {
            trees[i].childs = fn;
        }
    }
    newData = null;
    fn = null;
    return trees
}

格式后数据

data=[{
		"id": 1,
		"value": "工程",
		"childs": [{
				"id": 3,
				"value": "水电",
			},
			{
				"id": 4,
				"value": "煤气",
			}
		]
	}]

二、特殊数据格式化

//调用
var data=getArraySerTypeIdD(d.data,"list");
//格式化方法
function getArraySerTypeIdD(data,child){
  var trees =new Array();
  var fn;
  for (var i in data) {
        var newData={
            "id": data[i].id,
            "value": data[i].name,
            "code": data[i].code,
            "level":data[i].level,
            "parentId":data[i].parentId,
            "skillId":data[i].skillId,
            "sortNum":data[i].sortNum,
            "childs":[]
        }
      // console.log(newData)
      trees.push(newData);
      fn= getArraySerTypeIdD(data[i][child],child);
      if (data[i][child]) {
         trees[i].childs=fn;
      } 
  }
  newData=null;
  fn=null;
  return trees
}

格式化后

data=[{
		"id": 1,
		"code": "001",
		"value": "工程",
		"sortNum": 1,
		"parentId": 0,
		"skillId": "",
		"level": 1,
		"childs": [{
				"id": 3,
				"code": "001",
				"value": "水电",
				"sortNum": 1,
				"parentId": 1,
				"skillId": 1,
				"level": 2
			},
			{
				"id": 4,
				"code": "001",
				"value": "煤气",
				"sortNum": 2,
				"parentId": 1,
				"skillId": 2,
				"level": 2
			}
		]
	}]

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值