types = ['a1', 'b1'];
var liList = [
{
name: 'a1',
tags: ['a1', 'a2']
},
{
name: 'a1',
tags: ['a1', 'a3']
},
{
name: 'b1',
tags: ['b1', 'b2']
},
];
var liFunc = function (liList, types) {
$.each(types, function (i, type) {
liTree(liList, type.tags.concat());
});
};
var liTree = function (list, tags) {
if (tags.length > 0) {
var flag = true;
$.each(list, function (j, node) {
if (node.name === tags[0]) {
node.count++;
flag = false;
tags.splice(0, 1);
liTree(node.children, tags);
}
});
if (flag) {
list.push({
name: tags[0],
count: 1,
children: []
});
tags.splice(0, 1);
liTree(list[list.length - 1].children, tags);
}
}
};
// 执行
liFunc(liList, types);
// 结果
liList = [
{
name: 'a1',
count: 2,
children: [
{
name: 'a2',
count: 1,
children: []
},
{
name: 'a3',
count: 1,
children: []
}
]
},
{
name: 'b1',
count: 1,
children: [
{
name: 'b2',
count: 1,
children: []
}
]
}
];