猿问

在类型脚本和角度中对父项和子项进行排序

我有这个列表:


0: {id: 7, name: "333", code: "333", type: 3, hasParent: true, parentId: 4}


1: {id: 6, name: "dfgdfg", code: "dfgdfg", type: 3, hasParent: false, parentId: null}


2: {id: 5, name: "111", code: "111", type: 3, hasParent: true, parentId: 4}


3: {id: 4, name: "22", code: "22", type: 1, hasParent: false, parentId: null}


4: {id: 3, name: "yyy", code: "yyyy", type: 2, hasParent: false, parentId: null}


5: {id: 2, name: "dfgdfg", code: "dfgdfg", type: 3, hasParent: true, parentId: 1}


6: {id: 1, name: "cbcvb", code: "cvbcvcbv", type: 2, hasParent: false, parentId: null}

我需要按父级和子级对此列表进行排序。


如果项目的父值等于另一个项目的 id 的值,则应将具有 parentId 值的项目放在父值等于 id 值的项目下。


喜欢这个列表:


4: {id: 3, name: "yyy", code: "yyyy", type: 2, hasParent: false, parentId: 6}


1: {id: 6, name: "dfgdfg", code: "dfgdfg", type: 3, hasParent: false, parentId: null}


0: {id: 7, name: "333", code: "333", type: 3, hasParent: true, parentId: 4}


2: {id: 5, name: "111", code: "111", type: 3, hasParent: true, parentId: 4}


3: {id: 4, name: "22", code: "22", type: 1, hasParent: false, parentId: null}


5: {id: 2, name: "dfgdfg", code: "dfgdfg", type: 3, hasParent: true, parentId: 1}


6: {id: 1, name: "cbcvb", code: "cvbcvcbv", type: 2, hasParent: false, parentId: null}

我写了这段代码,但它不起作用,没有对项目列表进行排序:


    var Data = [{ id: 7, name: "333", code: "333", type: 3, hasParent: true, parentId: 4 },

{ id: 6, name: "dfgdfg", code: "dfgdfg", type: 3, hasParent: false, parentId: null },

{ id: 5, name: "111", code: "111", type: 3, hasParent: true, parentId: 4 },

{ id: 4, name: "22", code: "22", type: 1, hasParent: false, parentId: null },

{ id: 3, name: "yyy", code: "yyyy", type: 2, hasParent: false, parentId: null },

{ id: 2, name: "dfgdfg", code: "dfgdfg", type: 3, hasParent: true, parentId: 1 },

{ id: 1, name: "cbcvb", code: "cvbcvcbv", type: 2, hasParent: false, parentId: null }];


问题出在哪里?我怎么能解决这个问题 ????


慕桂英3389331
浏览 58回答 1
1回答

慕娘9325324

如果它没有嵌套元素,我认为你可以做一些类似的事情(但不会给你相同的结果 - 真的我认为你有一个错误,parentId的3不是6?this.sorted=[];//get all the elements that has parentconst childs=this.data.filter(x=>x.parentId).sort((a,b)=>a.parentId-b.parentId)//for eachchilds.forEach((x,i)=>{&nbsp; this.sorted.push(x)&nbsp; &nbsp; &nbsp;//<--add to sorted&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //if is the last or the next has diferent parent&nbsp; if (i==childs.length-1 || childs[i+1].parentId!=x.parentId)&nbsp; &nbsp; &nbsp;this.sorted.push(this.data.find(p=>p.id==x.parentId)) //<--add the parent})//finally include the elements that is not in the listthis.data.forEach(x=>{&nbsp; if (!this.sorted.find(s=>s.id==x.id))&nbsp; &nbsp; this.sorted.push(x)})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答