// 整理(成有关系)并排序 // GetNotebooks()调用 // ShareService调用 func ParseAndSortNotebooks(userNotebooks []info.Notebook, noParentDelete, needSort bool) info.SubNotebooks { // 整理成info.Notebooks // 第一遍, 建map // notebookId => info.Notebooks userNotebooksMap := make(map[bson.ObjectId]*info.Notebooks, len(userNotebooks)) for _, each := range userNotebooks { newNotebooks := info.Notebooks{Subs: info.SubNotebooks{}} newNotebooks.NotebookId = each.NotebookId newNotebooks.Title = each.Title // newNotebooks.Title = html.EscapeString(each.Title) newNotebooks.Title = strings.Replace(strings.Replace(each.Title, "<script>", "", -1), "</script", "", -1) newNotebooks.Seq = each.Seq newNotebooks.UserId = each.UserId newNotebooks.ParentNotebookId = each.ParentNotebookId newNotebooks.NumberNotes = each.NumberNotes newNotebooks.IsTrash = each.IsTrash newNotebooks.IsBlog = each.IsBlog // 存地址 userNotebooksMap[each.NotebookId] = &newNotebooks } // 第二遍, 追加到父下 // 需要删除的id needDeleteNotebookId := map[bson.ObjectId]bool{} for id, each := range userNotebooksMap { // 如果有父, 那么追加到父下, 并剪掉当前, 那么最后就只有根的元素 if each.ParentNotebookId.Hex() != "" { if userNotebooksMap[each.ParentNotebookId] != nil { userNotebooksMap[each.ParentNotebookId].Subs = append(userNotebooksMap[each.ParentNotebookId].Subs, each) // Subs是存地址 // 并剪掉 // bug needDeleteNotebookId[id] = true // delete(userNotebooksMap, id) } else if noParentDelete { // 没有父, 且设置了要删除 needDeleteNotebookId[id] = true // delete(userNotebooksMap, id) } } } // 第三遍, 得到所有根 final := make(info.SubNotebooks, len(userNotebooksMap)-len(needDeleteNotebookId)) i := 0 for id, each := range userNotebooksMap { if !needDeleteNotebookId[id] { final[i] = each i++ } } // 最后排序 if needSort { return sortSubNotebooks(final) } return final }
// 整理(成有关系)并排序 // GetNotebooks()调用 // ShareService调用 func ParseAndSortNotebooks(userNotebooks []info.Notebook, noParentDelete, needSort bool) info.SubNotebooks { // 整理成info.Notebooks // 第一遍, 建map // notebookId => info.Notebooks userNotebooksMap := make(map[bson.ObjectId]*info.Notebooks, len(userNotebooks)) for _, each := range userNotebooks { newNotebooks := info.Notebooks{Subs: info.SubNotebooks{}} newNotebooks.NotebookId = each.NotebookId newNotebooks.Title = each.Title newNotebooks.Seq = each.Seq newNotebooks.UserId = each.UserId newNotebooks.ParentNotebookId = each.ParentNotebookId newNotebooks.NumberNotes = each.NumberNotes newNotebooks.IsTrash = each.IsTrash newNotebooks.IsBlog = each.IsBlog userNotebooksMap[each.NotebookId] = &newNotebooks } // 第二遍, 追加到父下 // nilObjectId := bson.ObjectIdHex("") for id, each := range userNotebooksMap { // 如果有父, 那么追加到父下, 并剪掉当前, 那么最后就只有根的元素 if each.ParentNotebookId.Hex() != "" { if userNotebooksMap[each.ParentNotebookId] != nil { userNotebooksMap[each.ParentNotebookId].Subs = append(userNotebooksMap[each.ParentNotebookId].Subs, *each) // 并剪掉 delete(userNotebooksMap, id) } else if noParentDelete { // 没有父, 且设置了要删除 delete(userNotebooksMap, id) } } } // 第三遍, 得到所有根 final := make(info.SubNotebooks, len(userNotebooksMap)) i := 0 for _, each := range userNotebooksMap { final[i] = *each i++ } // 最后排序 if needSort { return sortSubNotebooks(final) } return final }