var retrunArr = []; const arr = [ ["项目库","餐饮","火锅"], ["项目库","餐饮","火大","火锅"], ["项目库1","餐饮","火大","火锅"], ["项目库1","餐饮","火大","火锅"], ["项目库2","餐饮","火大","火锅"], ]; function di(pushArr, index, strArr) { let obj, exist = false; obj = { name: strArr[index], children: index == strArr.length - 1 ? null : [] } pushArr.forEach((o) => { if (o.name === strArr[index]) { obj = o; exist = true; } }); if (!exist) { pushArr.push(obj); } if (index < strArr.length - 1 && obj.children !== null) { di(obj.children, index + 1, strArr); } } arr.forEach((o, i) => { di(retrunArr, 0, arr[i]); }); console.dir(JSON.stringify(retrunArr)); /*[ { "name": "项目库", "children": [ { "name": "餐饮", "children": [ { "name": "火锅", "children": null }, { "name": "火大", "children": [ { "name": "火锅", "children": null } ] } ] } ] }, { "name": "项目库1", "children": [ { "name": "餐饮", "children": [ { "name": "火大", "children": [ { "name": "火锅", "children": null } ] } ] } ] }, { "name": "项目库2", "children": [ { "name": "餐饮", "children": [ { "name": "火大", "children": [ { "name": "火锅", "children": null } ] } ] } ] } ]*/