【问题标题】:How to make a array from another array with grouping data based on id .?如何使用基于 id 的分组数据从另一个数组创建一个数组?
【发布时间】:2021-07-02 15:52:31
【问题描述】:

我有一个数组对象如下,

const data = [
   {
      "order_id":"ORDCUTHIUJ",
      "branch_code":"MVPA",
      "total_amt":199500,
      "product_details":[
         {
            "image":"CC252.jpg",
            "cate":"Mobile Accessories"
         }
      ]
   },
   {
      "order_id":"ORHOGFD79L",
      "branch_code":"PBVR",
      "total_amt":325880,
      "product_details":[
         {
            "image":"1617382086515.jpg",
            "cate":"Mobile Accessories"
         },
         {
            "image":"1617382322759.jpg",
            "cate":"Mobile Accessories"
         },
         {
            "image":"CC251.jpg",
            "cate":"Mobile Accessories"
         }
      ]
   },
   {
      "order_id":"ORIYDJLYSJ",
      "branch_code":"MVPA",
      "total_amt":1549500,
      "product_details":[
         {
            "image":"CC250.jpg",
            "cate":"Mobile Accessories"
         },
         {
            "image":"CC256.jpg",
            "cate":"Mobile Accessories"
         }
      ]
   }
]

我想要实现的是基于此构建一个新的数组,但我想将具有相同分支代码的数据分组到一个对象下。

预期输出:

const newData = 
[
  {
    MVPA: [
      {
        order_id: 'ORIYDJLYSJ',
        (otherdetails)
      },
      {
        order_id: 'ORDCUTHIUJ',
        (otherdetails
      }
    ]
  },
  PBVR: [
    {
      order_id: 'ORHOGFD79L',
      (otherdetails)
    }
  ]

有人可以帮我解决这个问题吗?我想要一个通用的解决方案,因为当我从 DB 获取时,这些数据可能比这更长。

【问题讨论】:

    标签: javascript arrays typescript express


    【解决方案1】:

    您可以使用 Array.reduce 来做到这一点。

    data.reduce((o, a) => (o[a.branch_code] = [ ...(o[a.branch_code] || []), a], o), {})

    【讨论】:

      【解决方案2】:

      首先创建一个使用 branch_code 收集数据的对象。

      const obj = data.reduce((map,obj)=>{
           if(obj.branch_code in map){
             map[obj.branch_code].push({...obj})
           }
           else{
            map[obj.branch_code]=[{...obj}]
           }
          return map
      },{})
      

      这给了

      {MVPA: Array(2), PBVR: Array(1)}
      

      然后,映射上述对象的键以创建所需的数组。

      const result = Object.keys(obj).map(key => ({[key]:
      [...obj[key]]}))
      
      console.log('result',result)
      

      这给了

      (2) [{…}, {…}]
      0: {MVPA: Array(2)}
      1: {PBVR: Array(1)}
      

      【讨论】:

        【解决方案3】:
        const uniqueBranchCode = [...new Set(data.map(i => i.branch_code))] // Get unique branch_code
        
        const newData = uniqueBranchCode
        .map(order => data.filter(orderSpecific => orderSpecific.branch_code === order)) // Filter to group together by branch_code
        .map(item => ({[item[0].branch_code]: item})) // Assign key and return elements
        

        const data = [
           {
              "order_id":"ORDCUTHIUJ",
              "branch_code":"MVPA",
              "total_amt":199500,
              "product_details":[
                 {
                    "image":"CC252.jpg",
                    "cate":"Mobile Accessories"
                 }
              ]
           },
           {
              "order_id":"ORHOGFD79L",
              "branch_code":"PBVR",
              "total_amt":325880,
              "product_details":[
                 {
                    "image":"1617382086515.jpg",
                    "cate":"Mobile Accessories"
                 },
                 {
                    "image":"1617382322759.jpg",
                    "cate":"Mobile Accessories"
                 },
                 {
                    "image":"CC251.jpg",
                    "cate":"Mobile Accessories"
                 }
              ]
           },
           {
              "order_id":"ORIYDJLYSJ",
              "branch_code":"MVPA",
              "total_amt":1549500,
              "product_details":[
                 {
                    "image":"CC250.jpg",
                    "cate":"Mobile Accessories"
                 },
                 {
                    "image":"CC256.jpg",
                    "cate":"Mobile Accessories"
                 }
              ]
           }
        ]
        
        const uniqueBranchCode = [...new Set(data.map(i => i.branch_code))]
        
        const newData = uniqueBranchCode
        .map(order => data.filter(orderSpecific => orderSpecific.branch_code === order))
        .map(item => ({[item[0].branch_code]: item}))
        
        console.log(newData)

        【讨论】:

          【解决方案4】:

          你可以试试这个方法

          const data =[{"order_id":"ORDCUTHIUJ","branch_code":"MVPA","total_amt":199500,"product_details":[{"image":"CC252.jpg","cate":"Mobile Accessories"}]},{"order_id":"ORHOGFD79L","branch_code":"PBVR","total_amt":325880,"product_details":[{"image":"1617382086515.jpg","cate":"Mobile Accessories"},{"image":"1617382322759.jpg","cate":"Mobile Accessories"},{"image":"CC251.jpg","cate":"Mobile Accessories"}]},{"order_id":"ORIYDJLYSJ","branch_code":"MVPA","total_amt":1549500,"product_details":[{"image":"CC250.jpg","cate":"Mobile Accessories"},{"image":"CC256.jpg","cate":"Mobile Accessories"}]}];
          
          const result = data.reduce((acc, {order_id, branch_code, product_details}) => {
            acc[branch_code] ??= {[branch_code]: []};
            acc[branch_code][branch_code].push({order_id, product_details});
            
            return acc;
          }, {});
          
          console.log(Object.values(result));

          【讨论】:

          • 这能回答你的问题吗?如果您需要任何帮助,请告诉我^^! @Thorin
          【解决方案5】:
          let obj = {}
          
          function comp(x) {
          const f1 = data.filter(function (i) {
              return i.branch_code === x
          })
          
          return f1
          }
          
          for (let i = 0; i < data.length; i++) {
          obj[`${data[i].branch_code}`] = comp(data[i].branch_code)
          }
          
          console.log(obj)
          

          【讨论】:

          • 在 for 循环中调用你的函数
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2012-12-16
          • 2017-05-06
          • 2013-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多