簡體   English   中英

將對象數組重新格式化為鍵控數組

[英]Reformat an array of objects to an array of key'd arrays

因此,我是Java語言的新手,但我嘗試將startArray重新格式化為endArray。 startArray基本上是訂單對象的數組,它們將始終具有不同的orderId,但可以具有相同的companyId。 我基本上是在嘗試將其切換為基於公司的名稱,因此對於每個companyId,所有這些公司訂單都有一系列。 我一直在嘗試並嘗試解決這個問題,但是老實說,我不確定從哪里開始,甚至不確定這種操作是否可行。

我正在研究Google Apps腳本,我認為它仍使用ES5語法,如果可能的話,我寧願使用普通的javascript。

var startArray = [
    {"companyId" : 1,
     "orderId" : 25,
     "product" : "productA"
     "quantity" : 2,
     "price" : 10,
    },
    {"companyId" : 1,
     "orderId" : 20,
     "product" : "productB"
     "quantity" : 3,
     "price" : 5,
    },
   {"companyId" : 2,
     "orderId" : 15,
     "product" : "productA"
     "quantity" : 5,
     "price" : 10,
    }
 ]

 var endArray = [ {
      '1' = [{"orderId" : 25,
         "product" : "productA"
         "quantity" : 2,
         "price" : 10,},
         {"orderId" : 20,
          "product" : "productB"
          "quantity" : 3,
          "price" : 5,}
      },{
     '2' = [{"orderId" : 15,
          "product" : "productA"
          "quantity" : 5,
          "price" : 10,
         }]
   }]


 ]

如果您可以將結果作為對象而不是數組,則可以這樣做:

 var startArray = [ {"companyId" : 1, "orderId" : 25, "product" : "productA", "quantity" : 2, "price" : 10, }, {"companyId" : 1, "orderId" : 20, "product" : "productB", "quantity" : 3, "price" : 5, }, {"companyId" : 2, "orderId" : 15, "product" : "productA", "quantity" : 5, "price" : 10, } ]; var ret = {} startArray.forEach(company => { if (!ret[company.companyId]) { ret[company.companyId] = []; } ret[company.companyId].push(company); }); console.log(ret); 

如果您不支持ES6,則只需for in循環中使用經典的for in而不是forEach

使用諸如reduce方法創建一個新對象,如果還不存在,請插入一個數組作為companyId的鍵:

 function reduce(arr, callback, initialVal) { var accumulator = (initialVal === undefined) ? undefined : initialVal; for (var i = 0; i < arr.length; i++) { if (accumulator !== undefined) accumulator = callback.call(undefined, accumulator, arr[i], i, this); else accumulator = arr[i]; } return accumulator; } var startArray = [ {"companyId" : 1, "orderId" : 25, "product" : "productA", "quantity" : 2, "price" : 10, }, {"companyId" : 1, "orderId" : 20, "product" : "productB", "quantity" : 3, "price" : 5, }, {"companyId" : 2, "orderId" : 15, "product" : "productA", "quantity" : 5, "price" : 10, } ]; var endObj = reduce(startArray, function (accum, item) { var companyId = item.companyId; if (!accum[companyId]) accum[companyId] = []; delete item.companyId; accum[companyId].push(item); return accum; }, {}); console.log(endObj); 

暫無
暫無

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

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