大家帮我看看,这个JS怎么处理分组?-灵析社区

明道

我有一个数组,如下: let datalist = [ "man-steady", "woman-steady", "woman-gentle", "man-young", "tcloud_10510000", "tcloud_1001", "tcloud_1002", "tcloud_1018", "tcloud_101015", "tcloud_101050", "tcloud_1004", "tcloud_1050", "tcloud_101056", "tcloud_1003", "tcloud_301041", "WYS_15923375458_001", "WYS_15332681888_001", "WYS_15712098340_001", "WYS_15532485330_001", "WYS_15875942524_001", "WYS_15923375458_002", "WYS_15560857009_001", "WYS_15332681888_002", "DDS_15570649499_001", "WYS_15875942524_002" ] 我想把这个数组处理成 这样的格式: let datalist2 = [ { name: 'man', children: [{ name: 'man-steady', }, { name: 'man-young', }] }, { name: 'woman', children: [{ name: 'woman-steady', }, { name: 'woman-gentle', }] }, { name: 'WYS', children: [{ name: '15923375458', children: [{ name: 'WYS_15923375458_001' }] }, { name: '15332681888', children: [{ name: 'WYS_15332681888_001' }, { name: 'WYS_15332681888_002' }] }] }, { name: 'tcloud', children: [{ name: 'tcloud_10510000', }, { name: 'tcloud_1001', }, { name: 'tcloud_1002', }] } ] 类似于datalist2这样的数据结构,怎么才能实现呢?

阅读量:15

点赞量:0

问AI
let datalist = [ "man-steady", "woman-steady", "woman-gentle", "man-young", "tcloud_10510000", "tcloud_1001", "tcloud_1002", "tcloud_1018", "tcloud_101015", "tcloud_101050", "tcloud_1004", "tcloud_1050", "tcloud_101056", "tcloud_1003", "tcloud_301041", "WYS_15923375458_001", "WYS_15332681888_001", "WYS_15712098340_001", "WYS_15532485330_001", "WYS_15875942524_001", "WYS_15923375458_002", "WYS_15560857009_001", "WYS_15332681888_002", "DDS_15570649499_001", "WYS_15875942524_002", ] type Data = { name: string; children?: Data[] } function parse( arr: Data[], [name, splitter, ...rest]: string[], nameAll = "", ) { if (!arr.some((v) => v.name === name)) arr.push({ name }) const d = arr.find((v) => v.name === name)! if (rest.length) { d.children ??= [] parse(d.children, rest, `${nameAll}${name}${splitter}`) } else d.name = nameAll + d.name return arr } const p = datalist.map((d) => d.split(/(-|_)/)) .reduce((p, c) => parse(p, c), []) console.log(JSON.stringify(p)) 结果: [ { "name": "man", "children": [{ "name": "man-steady" }, { "name": "man-young" }] }, { "name": "woman", "children": [{ "name": "woman-steady" }, { "name": "woman-gentle" }] }, { "name": "tcloud", "children": [ { "name": "tcloud_10510000" }, { "name": "tcloud_1001" }, { "name": "tcloud_1002" }, { "name": "tcloud_1018" }, { "name": "tcloud_101015" }, { "name": "tcloud_101050" }, { "name": "tcloud_1004" }, { "name": "tcloud_1050" }, { "name": "tcloud_101056" }, { "name": "tcloud_1003" }, { "name": "tcloud_301041" } ] }, { "name": "WYS", "children": [ { "name": "15923375458", "children": [ { "name": "WYS_15923375458_001" }, { "name": "WYS_15923375458_002" } ] }, { "name": "15332681888", "children": [ { "name": "WYS_15332681888_001" }, { "name": "WYS_15332681888_002" } ] }, { "name": "15712098340", "children": [{ "name": "WYS_15712098340_001" }] }, { "name": "15532485330", "children": [{ "name": "WYS_15532485330_001" }] }, { "name": "15875942524", "children": [ { "name": "WYS_15875942524_001" }, { "name": "WYS_15875942524_002" } ] }, { "name": "15560857009", "children": [{ "name": "WYS_15560857009_001" }] } ] }, { "name": "DDS", "children": [ { "name": "15570649499", "children": [{ "name": "DDS_15570649499_001" }] } ] } ]