版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21423689/article/details/84348463
测试json:
将层级json转为数据库存储的平级键关联数据
/**
* 将层级json转为数据库存储的平级键关联数据
* @param {[type]} json [description]
*/
function JsonToSqlArr(json) {
let arr = [];
function getjson(curdata) {
if (!curdata.length) {
return arr;
}
for (let i = 0; i < curdata.length; i++) {
arr.push(curdata[i]);
if (curdata[i].childs.length) {
getjson(curdata[i].childs);
}
}
}
getjson(json);
return arr;
}
//换块内存存储
let arr=JSON.parse(JSON.stringify(JsonToSqlArr(json)));
//为了模拟删除childs
for (let i in arr) {
delete arr[i].childs;
}
console.log(arr,'由json分层的数据');
将数据库键关联数据转成前台需要的层级json
/**
* 将数据库键关联数据转成前台需要的层级json
* @param {[type]} arr [description]
* @return {[type]} [description]
*/
function getarrTojson(arr) {
let ding = [];
for (let i = 0; i < arr.length; i++) {
arr[i].childs = [];
if (arr[i].fid == 0) {
ding.push(arr[i]);
arr.splice(i, 1);
}
}
for (let i = 0; i < ding.length; i++) {
getJson(arr, ding[i]);
}
function getJson(arr, ding) {
for (let i in arr) {
if (arr[i].fid == ding.id) { //如果在这层找到
if (ding.childs == undefined) {
ding.childs = [];
}
ding.childs.push(arr[i]);
//为每一个匹配自己的子节点
getJson(arr, ding.childs[ding.childs.length - 1]);
} else {
continue;
}
}
};
return ding;
}
完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class="aa"></div>
<script>
let json = [{
"id": 600,
"dname": "集团中国总部",
"fid": 0,
"childs": [{
"id": 601,
"dname": "广东省公司",
"fid": 600,
"childs": [{
"id": 602,
"dname": "深圳分公司",
"fid": 601,
"childs": [{
"id": 603,
"dname": "福田办事处",
"fid": 602,
"childs": [{
"id": 613,
"dname": "车公庙办事点",
"fid": 603,
"childs": [{
"id": 618,
"dname": "测试点",
"fid": 613,
"childs": []
}]
}]
}]
}]
},
{
"id": 606,
"dname": "湖南省公司",
"fid": 600,
"childs": [{
"id": 607,
"dname": "长沙分公司",
"fid": 606,
"childs": []
}]
},
{
"id": 612,
"dname": "上海市公司",
"fid": 600,
"childs": []
}
]
},
{
"id": 604,
"dname": "集团美国总部",
"fid": 0,
"childs": [{
"id": 605,
"dname": "纽约分公司",
"fid": 604,
"childs": [{
"id": 611,
"dname": "曼哈顿办事处",
"fid": 605,
"childs": []
}]
}]
}
];
/**
* 将层级json转为数据库存储的平级键关联数据
* @param {[type]} json [description]
*/
function JsonToSqlArr(json) {
let arr = [];
function getjson(curdata) {
if (!curdata.length) {
return arr;
}
for (let i = 0; i < curdata.length; i++) {
arr.push(curdata[i]);
if (curdata[i].childs.length) {
getjson(curdata[i].childs);
}
}
}
getjson(json);
return arr;
}
//换块内存存储
let arr = JSON.parse(JSON.stringify(JsonToSqlArr(json)));
//为了模拟删除childs
for (let i in arr) {
delete arr[i].childs;
}
console.log(arr, '由json分层的数据');
/**
* 将数据库键关联数据转成前台需要的层级json
* @param {[type]} arr [description]
* @return {[type]} [description]
*/
function getarrTojson(arr) {
let ding = [];
for (let i = 0; i < arr.length; i++) {
arr[i].childs = [];
if (arr[i].fid == 0) {
ding.push(arr[i]);
arr.splice(i, 1);
}
}
for (let i = 0; i < ding.length; i++) {
getJson(arr, ding[i]);
}
function getJson(arr, ding) {
for (let i in arr) {
if (arr[i].fid == ding.id) { //如果在这层找到
if (ding.childs == undefined) {
ding.childs = [];
}
ding.childs.push(arr[i]);
//为每一个匹配自己的子节点
getJson(arr, ding.childs[ding.childs.length - 1]);
} else {
continue;
}
}
};
return ding;
}
//打印是否生成成功
console.log(getarrTojson(arr), '++++++');
</script>
}
</body>
</html>