作为一个java开发者,前台转换对我还是有点挑战的,难得写出来还是记录一下吧。
等下直接贴代码(省时间),因业务需求,不是根据id作为父级id,而是当某个字段相同时,其他字段不同的为其子节点。
//整理数据,使其成为树形结构
function initNodes(data, workingPlaceId, treeType) { //treeType是为了满足几种情况,可以选择性看
//定义数组,存放构建树所需的json格式
var trees = [];
var parentNode = null;
var set = new Set();
for (var i = 0; i < data.length; i++) {
//将data中的所有品名放入set中进行去重(原来js也是可以set去重的,原谅我之前水准更低。。)
set.add(data[i].MaterialName);
}
//定义索引
var index = 0;
var isPut = true;
var materialManagementId = "";
var materialName = "";
var brand = "";
var modelNumber = "";
var standard = "";
var enumName = "";
var warningLine = "";
//遍历去重后的父节点并将其放入树中
set.forEach(function (element, sameElement, set) {
trees.push({
id: workingPlaceId,
text: element
});
//遍历data数据
for (var i = 0; i < data.length; i++) {
//循环获取当物料名相同时的子节点
materialManagementId = data[i].MaterialManagementId;
materialName = data[i].MaterialName;
brand = data[i].Brand;
modelNumber = data[i].ModelNumber;
standard = data[i].Standard;
enumName = data[i].EnumName;
warningLine = data[i].WarningLine;
if(brand == undefined){
brand = "";
}
if(modelNumber == undefined){
modelNumber = "";
}
if(standard == undefined){
standard = "";
}
if(enumName == undefined){
enumName = "";
}
if (element == materialName) { //这就是我业务上的需求,正常情况你们可以直接id = pid 就搞定了
//获取父节点的节点
parentNode = trees[index];
//当父节点不为空或未定义时
if (parentNode != "" && parentNode != undefined) {
if (treeType == 0) { //看一个type就行了
//添加子节点
addNodeToChildren(parentNode, {
id: workingPlaceId,
text: "品牌:" + brand + " , " + "型号:" + modelNumber + " , " + "规格:" + standard + " , " + "类型:" + enumName + " , " + "警戒线:" + warningLine,
materialManagementId : materialManagementId
});
}
if (treeType == 1) {
//物料主键,之后作于形参传出
//添加子节点
addNodeToChildren(parentNode, {
id: workingPlaceId,
text: "品牌:" + brand + " , " + "型号:" + modelNumber + " , " + "规格:" + standard + " , " + "类型:" + enumName + "---------" + "<button id='addDtailNode' onclick='addDtailNode(" + materialManagementId + "," + workingPlaceId + ")' style='font-size: 15px;'>=></button>"
});
}
if (treeType == 2) {
//物料主键,之后作于形参传出
//添加子节点
addNodeToChildren(parentNode, {
id: workingPlaceId,
text: "品牌:" + brand + " , " + "型号:" + modelNumber + " , " + "规格:" + standard + " , " + "类型:" + enumName + "---------" + "<button id='removeDetailNode' onclick='removeDetailNode("+materialManagementId+","+workingPlaceId+")' style='font-size: 15px;'><=</button>"
});
}
}
}
}
//索引自增
index++;
});
return trees;
}
//给子节点添加数据
function addNodeToChildren(parentNode, node) {
if (parentNode.children) {
//如果子节点有数据,添加
parentNode.children.push(node);
} else {
parentNode.children = [ node ];
}
}
就这样,希望下次轻松点~