递归修改键名
let list = [{
ids: 1,
name: '蔬菜',
children: []
},
{
ids: 2,
name: '水果',
children: [{
ids: 22,
name: '香蕉',
children: []
}]
}
]
修改键名的逻辑
function parseJson(arr) {
var arr = arr.slice()
function toParse(arr) {
arr.forEach((item) => {
console.log(item,222);
item.label = item.name
item.id = item.ids
delete item.name
delete item.ids
if (item.children.length > 0 && Array.isArray(item.children)) {
item['childrens'] = item.children
toParse(item['childrens'])// 这个时候传入的是childrens 而不是children
}
delete item.children
})
console.log(arr,1111);
return arr
}
return toParse(arr)
}
输出内容
{ ids: 1, name: '蔬菜', children: [] } 222
{
ids: 2,
name: '水果',
children: [ { ids: 22, name: '香蕉', children: [] } ]
} 222
{ ids: 22, name: '香蕉', children: [] } 222
[ { label: '香蕉', id: 22 } ] 1111 // 注意这里 是香蕉
[
{ label: '蔬菜', id: 1 },
{ label: '水果', id: 2, childrens: [ [Object] ] }
] 1111
正则修改键名
let list = [{
ids: 1,
name: '蔬菜',
children: []
},
{
ids: 2,
name: '水果',
children: [{
ids: 22,
name: '香蕉',
children: []
}]
}
]
let stlist = JSON.stringify(list);
stlist = stlist.replace(/\"ids"/g, '"id"');
stlist = stlist.replace(/\"name"/g, '"label"');
stlist = stlist.replace(new RegExp(/(,"children":\[\])/g), '');
console.log(JSON.parse(stlist));
将扁平数据进行嵌套处理
const list = [
{id:1,name:'一级 1',pid:0},
{id:2,name:'二级 1-1',pid:1},
{id:3,name:'二级 1-2',pid:1},
{id:4,name:'三级 1-1-1',pid:2},
{id:5,name:'一级 2',pid:0},
]
function listToTree(list){
return list.filter(e => {
let pid = e.pid;
let newArr = list.filter(ele => {
if(ele.id == pid){
if(!ele.children){
ele.children = [];
}
ele.children.push(e);
return true
}
});
return newArr.length===0
});
}
listToTree(list);
原作者在这:将扁平化数据转为嵌套式数据
以上均为网上转载 ,有的原创链接找不到了。
因为不选原创过于麻烦,本人就厚颜选择原创了。