1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| const arr = [ { id: '1.1', label: '武汉市' }, { id: '1.1.2', label: '武汉市洪山区' }, { id: '1.3.1', label: '孝感市孝南区' }, { id: '1.5.1', label: '黄石市黄石港区' }, { id: '1.2', label: '宜昌市' }, { id: '1', label: '湖北省' }, { id: '1.1.1', label: '武汉市江夏区' }, { id: '1.2.1', label: '宜昌市伍家岗区' }, { id: '1.3', label: '孝感市' } ]
const arrayToTree = (originArr) => { const result = []; const resultIdsSet = new Set();
originArr.forEach(item => { if (item.id.length === 1) { result.push(item) } item.children = originArr.filter(originItem => { const originItemIdArr = originItem.id.split('.'); const itemIdArr = item.id.split('.');
if (itemIdArr.length + 1 === originItemIdArr.length && itemIdArr.every((i, k) => i === originItemIdArr[k])) { resultIdsSet.add(item.id); resultIdsSet.add(originItem.id); return tree; } return false; }) }) return [...result, ...arr.filter(item => !resultIdsSet.has(item.id))]; }
console.log(arrayToTree(arr))
|