将所有键名为list变成children,键名为name变成label怎么弄,写了半天只改到了第二层,第三层获取的数组里都是undefined,求大神帮忙
function changeName(a) {
var isArray = function(b) {
return Object.prototype.toString.call(b) == '[object Array]';
};
if (isArray(a) && a.length) {
for (let i = 0; i < a.length; i++) {
if (a[i].name) {
a[i].label = a[i].name;
delete a[i].name;
}
if (a[i].list) {
a[i].children = a[i].list;
delete a[i].list;
changeName(a[i].children);
}
}
}
}
changeName(tree);
const tree = [
{
name: 'node1',
id: '1-1'
},
{
name: 'node2',
list: [
{
name: 'node-2-1',
id: '2-1'
},
{
name: 'node2-2',
id: '2-2'
}
]
},
{
name: 'node3',
list: [
{
name: 'node-3-1',
id: '3-1',
list: [
{
name: 'node3-1-1',
id: '3-1-1'
}
]
},
{
name: 'node3-2',
id: '3-2'
}
]
}
]
function trans (tree) {
tree.forEach(item => {
if (item.list) {
item.children = item.list
delete item.list
trans(item.children)
}
if (item.name !== undefined) {
item.label = item.name
delete item.name
}
})
}
trans(tree)
console.log(tree)
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
这个tree看起来格式很规范,所以转成字符串替换下再转 JSON 得了:
从思考到写完只用不到三分钟。
而递归写起来多麻烦,你看:
PS. 以上代码未经测试,如有需要,请自行测试、改良。