簡體   English   中英

如何在數組中對 object 進行分組

[英]How to group object inside array

這是我所擁有的

 [
   {
     typeProgramId: {
       name: 'type1',
     },
     title: 'test1',
   },
   {
     typeProgramId: {
       name: 'type1',
     },
     subTypeProgramId: [{
       name: 'sub1',
     }],
     title: 'test2',
   },
  {
     typeProgramId: {
       name: 'type2',
     },
     title: 'test3',
   },
   {
     typeProgramId: {
       name: 'type2',
     },
     subTypeProgramId: {
       name: 'sub2',
     },
     title: 'test4',
   }
 ]

首先,如果標題具有相同的 typeProgramId,我想對 typeProgramId 進行分組,我想按每個 typeProgramId 將標題推送到數組中,但是如果數據具有 typeProgramId 和 subTypeProgram Id,我也想在 typeProgramId 中對 subtypeProgramId 進行分組。 如果不為空 subtypeProgramId 我想將它推送到 subtypeProgram Id 內的數組標題中。 我嘗試使用 lodash groupBy 和多種方式,但它仍然不起作用。

這就是我想要的

{
    typeProgramId: [{
        name: 'type1',
        title: [
            'test1',
        ],
        subTypeProgramId: {
            name: sub1,
            title: [
                'test2'
            ]
        }
    }, {
        name: 'type2',
        title: [
            'test3',
        ],
        subTypeProgramId: [{
            name: sub1,
            title: [
                'test4'
            ]
        }
    }]
}

我現在應該做什么

  let result = _.groupBy(getProgram, function(data) {
    return data.typeProgramId
  })
  result = _.map(result, function(group, data) { 
    // I think in here I must groupBy subTypeProgramId again 
    // the data return all string not object after group 
    return {
      typeProgramId: data,
      titile: group,
    }
  })

請檢查以下代碼。 我使用了reduce數組的 function。 它產生了預期的結果。


function updateMem(mem, prgIndex, val){
    if(prgIndex < 0) {
      mem.typeProgramId.push({});
      prgIndex = mem.typeProgramId.length - 1;
    }

    mem.typeProgramId[prgIndex].name = val.typeProgramId.name;

    if(val.subTypeProgramId){
      mem.typeProgramId[prgIndex].subTypeProgramId = Object.assign({}, mem.typeProgramId[prgIndex].subTypeProgramId || {}, {"name" : val.subTypeProgramId.name, "title": []});
      mem.typeProgramId[prgIndex].subTypeProgramId.title.push(val.title);
      
    } else {
      mem.typeProgramId[prgIndex].title = (mem.typeProgramId[prgIndex].title ? mem.typeProgramId[prgIndex].title : []);
      mem.typeProgramId[prgIndex].title.push(val.title);
    }
};

arr.reduce((mem, val) => {
  var prgIndex = mem.typeProgramId.findIndex((p) => p.name === val.typeProgramId.name);
  updateMem(mem, prgIndex, val);
  return mem;
}, {typeProgramId: []});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM