JSON,數組根據字段多次分組


我們在前端開發過程中,遇到json對象,有時會需要多次分組。比如說,先按照是業務分組,然后再按照產品線分組,然后通過table或其他方式展示或操作

var obj1=[
  {
   "demp":"001",
   "line":"a",
   "id":"1",
   },
  {
   "demp":"001",
   "line":"b",
   "id":"2",
   },
  {
   "demp":"001",
   "line":"c",
   "id":"3",
   },
 {
   "demp":"002",
   "line":"a",
   "id":"4",
   },
{
   "demp":"002",
   "line":"b",
   "id":"5",
   },
{
   "demp":"002",
   "line":"b",
   "id":"6",
}
]

方法一:先寫一個分組的方法 先根據一個字段把json分組,通過循環,再根據另一個字段分組。如果根據n個字段多次分組,就要循環多次。書寫起來比較麻煩,也比較亂,不建議。

function trans(obj1,key1){
    var obj={};
var arr=[];
for(i in obj1){
 if(arr.indexOf(obj1[i][key1])=="-1"){
    arr.push(obj1[i][key1]);
   console.log(i);
 }
}
for(j in arr){
  for(k in obj1){
     if(obj1[k][key1]==arr[j]){
     if(obj[arr[j]]){
        obj[arr[j]].push(obj1[k]);
     }else{
       obj[arr[j]]=[obj1[k]];
      }
      
    }
  }
}
return obj;
}
var obj2=trans(obj1,"demp");
var newobj={};
for(i in obj2){
 obj2[i]=trans(obj2[i],"line");
}
console.log(obj2);

方法二:同樣是先寫一個方法 方法內傳分組對象的數組,即可實現多次分組

function createTree(arr,keys) {
  function createObj(arr, arrORobj, keys, start) {
    for (let i = 0; i < arr.length; i++) {
      // 當不存在一個排序的key,返回[]
      if (start >= keys.length) {
        let newArray=Array.isArray(arrORobj)?arrORobj:[]
        return newArray.concat(arr[i])
      }
      let curKey = keys[start]
      let curVal = arr[i][curKey]
      if(!curVal)continue
      // 存在key對應的值存在,傳入{}構造
      let newObj = arrORobj[curVal] ? arrORobj[curVal] : {}
      arrORobj[curVal] = createObj([arr[i]], newObj, keys, start + 1)
    }
    // 存在一個排序的key,返回{}
    return arrORobj
  }
  return createObj(arr,{},keys,0)
}

createTree(obj1,['demp','line'])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM