js将数组根据指定属性值分组成二维数组

根据mulit字段+codeKey+codeType三个字段进行分组

oneDimensionalArr: [
     {multi: 'one',codeKey: 'LTL', codeType: 1, name: 'ABC', id: 1},
     {multi: 'one',codeKey: 'LTL', codeType: 1, name: 'ioh', id: 3},

     {multi: 'mulit',codeKey: 'LTL', codeType: 1, name: 'CDF', id: 6},

     {multi: 'mulit',codeKey: 'FES', codeType: 1, name: 'werr', id: 4},

     {multi: 'one',codeKey: 'FES', codeType: 2, name: 'ytg', id: 5},
     {multi: 'one',codeKey: 'FES', codeType: 2, name: 'CDF', id: 2},

     {multi: 'mulit',codeKey: 'FRE', codeType: 2, name: 'etery', id: 7},
     {multi: 'mulit',codeKey: 'FRE', codeType: 2, name: 'nvn', id: 8},
     {multi: 'mulit',codeKey: 'FRE', codeType: 2, name: 'abc', id: 9},

     {multi: 'one',codeKey: 'Small', codeType: 1, name: 'ware', id: 10},
     {multi: 'one',codeKey: 'Small', codeType: 1, name: 'trwe', id: 11},
]

最终想要的结果

[
      {
        multi: 'one',
        codeKey: 'LTL', 
        codeType: 1, 
        list:[
          {multi: 'one',codeKey: 'LTL', codeType: 1, name: 'ABC', id: 1},
          {multi: 'one',codeKey: 'LTL', codeType: 1, name: 'ioh', id: 3},
        ]
     },
     {
        multi: 'mulit',
        codeKey: 'LTL', 
        codeType: 1, 
        list:[{multi: 'mulit',codeKey: 'LTL', codeType: 1, name: 'CDF', id: 6}]
    },
    {
      multi: 'mulit',
      codeKey: 'FES', 
     codeType: 1, 
      list:[
            {multi: 'mulit',codeKey: 'FES', codeType: 1, name: 'werr', id: 4},
           ]
    },
    {
      multi: 'one',
      codeKey: 'FES', 
      codeType: 2, 
      list:[
             {multi: 'one',codeKey: 'FES', codeType: 2, name: 'ytg', id: 5},
              {multi: 'one',codeKey: 'FES', codeType: 2, name: 'CDF', id: 2},
          ]
  },
  {
     multi: 'mulit',
     codeKey: 'FRE', 
     codeType: 2, 
     list:[
            {multi: 'mulit',codeKey: 'FRE', codeType: 2, name: 'etery', id: 7},
            {multi: 'mulit',codeKey: 'FRE', codeType: 2, name: 'nvn', id: 8},
           {multi: 'mulit',codeKey: 'FRE', codeType: 2, name: 'abc', id: 9},
          ]
 },
{
    multi: 'one',
    codeKey: 'Small', 
    codeType: 1, 
    list:[
             {multi: 'one',codeKey: 'Small', codeType: 1, name: 'ware', id: 10},
             {multi: 'one',codeKey: 'Small', codeType: 1, name: 'trwe', id: 11},
         ]
 },

实现方案

// 根据指定属性值将一维数组进行分组成二维数组
mapTwoDimension(arr) {
      console.log(arr, 'arr');
      let dataArr = []
      if (arr.length === 0)  {
            return dataArr
      }
      arr.map(oneDim => {
           if (dataArr.length == 0) {
                dataArr.push({
                     multi: oneDim.multi,
                     codeKey: oneDim.codeKey,
                     codeType: oneDim.codeType,
                     list: [oneDim]
                })
            } else {
                let res = dataArr.some(item => { // 判断相同,有就添加到当前项
                if (item.multi == oneDim.multi && item.codeType == oneDim.codeType &&
                        item.codeKey == oneDim.codeKey) {
                        item.list.push(oneDim)
                        return true
                        }
                    })
                    if (!res) { // 如果没找相同添加一个新对象
                        dataArr.push({
                        multi: oneDim.multi,
                        codeKey: oneDim.codeKey,
                        codeType: oneDim.codeType,
                        list: [oneDim]
                        })
                    }
                 }
     })
     console.info(dataArr, 'dataArr')
     return dataArr
},

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值