例如↓陣列中每條資料的url欄位相似
arr = [ { id:0, dir:'/edit/aaaa/bbbb/cccc/dddd/20231123', title:'第一條資料' }, { id:1, dir:'/edit/aaaa/bbbb/cccc/dddd/20241011', title:'第二條資料' }, { id:2, dir:'/edit/aaaa/bbbb/cccc/dddd/20240623', title:'第三條資料' }, { id:3, dir:'/edit/aaaa/bbbb/cccc/dddd/20240313', title:'第四條資料' }, { id:4, dir:'/edit/aaaa/bbbb/cccc/dddd/20241224/12', title:'第五條資料' },
]
變成↓
arr = [ { id:0, dir:'/edit/aaaa/bbbb/cccc/dddd/20231123', title:'第一條資料', children:[{ id:1, dir:'/edit/aaaa/bbbb/cccc/dddd/20241011', title:'第二條資料' }, { id:2, dir:'/edit/aaaa/bbbb/cccc/dddd/20240623', title:'第三條資料' }, { id:3, dir:'/edit/aaaa/bbbb/cccc/dddd/20240313', title:'第四條資料' }, { id:4, dir:'/edit/aaaa/bbbb/cccc/dddd/20241224/12', title:'第五條資料' }] } ]
實現方法
unique5(data) { var result = []; var hash = {}; let sum; for (var i = 0; i < data.length; i++) { //擷取出來相似的部分 (/edit/aaaa/bbbb/ccc/ddd) if ((data[i].dir.slice(data[i].dir.lastIndexOf('/')) +'').length=== 9) { //判斷是否為時間 sum = data[i].dir.slice(0, data[i].dir.lastIndexOf('/')); } else { //例如第五條資料特殊資料判斷 const lastIndex = data[i].dir.lastIndexOf('/'); sum = data[i].dir.slice(0, data[i].dir.lastIndexOf('/', lastIndex - 1)); } if (!hash[sum]) {//不存在加進去 result.push({...data[i], children: []}); hash[sum] = true; } else { // 已存在 加入 children 裡面 const dindData = result.find(item => { return item.dir.includes(sum); }); dindData ? dindData.children.push({...data[i]}) : null; } } return result; },