js对后端传递的三维扁平化数组排序

[{Col:2,Row:3,Lay:1},{Col:1,Row:1,Lay:1},{Col:1,Row:2,Lay:4}]

 简略数据格式如上,用sort方法排序

data.Result.sort((a,b)=>{
    if(a.Row!==b.Row){
        return a.Row-b.Row
        }
    else{
        return a.Col-b.Col
    }
})   

 即可输出

_______________________________________________________________________________________________________________________

直接将一个数组转为树形的二维数组(我做的还有一个lay层级没转,三维多加一步就行)

this.tableData = data.Result.sort((a,b)=>{ // 先进行排序
  if(a.Row!==b.Row){return a.Row-b.Row}
  else if(a.Col!==b.Col){return a.Col-b.Col}
  else{return a.Lay-b.Lay}
})
let loctionarr=this.tableData.map((c,i)=>{ // 获取所有的行列可能
return {Row:c.Row,Col:c.Col}
})
const map=new Map()  // 将此行列集合去重
for(let item of loctionarr){
if(!map.has(''+item.Row+'-'+item.Col+'')){  // Map不能两个参数去重,这里将他拼接成字符串,也可以直接JSON.stringify()序列化整个对象
map.set(''+item.Row+'-'+item.Col+'',item)
}
}
loctionarr=[...map.values()] // 提出去重后的数组


loctionarr.map(c=>c.childs=[]) //进行对应行列的字数据绑定
loctionarr=loctionarr.filter(c=>c.Row!==0)
for(let i=0;i<this.tableData.length;i++){
  let obj=this.tableData[i]
  for(let j=0;j<loctionarr.length;j++){
    if(obj.Row===loctionarr[j].Row&&obj.Col===loctionarr[j].Col){
      loctionarr[j].childs.push(obj)
    }
  }
}
this.tableData=loctionarr

 

posted @ 2022-11-21 13:56  2han9x1nyun  阅读(74)  评论(0)    收藏  举报