簡體   English   中英

我將如何合並和轉換數組中的 JS 對象

[英]How Would I Go About Merging & Transforming JS Objects In An Array

假設我有一個對象數組,如下所示:

 const array = [ { saleRef: 10, itemName: "Rum", supplier: "Rum Co Ltd", itemValue: 3.99, totalSale: 5.99 }, { saleRef: 10, itemName: "Coke", supplier: "Coke Co Ltd", itemValue: 2.0, totalSale: 5.99 }, { saleRef: 8, itemName: "Beer", supplier: "Berr Co Ltd", itemValue:c 2.99, totalSale: 2.99 } ];

如何創建一個新的對象數組,如下所示:

 const wantedArray = [ { saleRef: 10, items: { item1: { itemName: "Rum", supplier: "Rum Co Ltd", itemValue: 3.99, }, item2: { itemName: "Coke", supplier: "Coke Co Ltd", itemValue: 2.0, } }, totalSale: 5.99 }, { saleRef: 8, itemName: "Beer", supplier: "Berr Co Ltd", itemValue: 2.99, totalSale: 2.99 } ]

本質上,我想遍歷大量對象,其中一些對象具有匹配的“saleRef”。 當“saleRef 匹配”時,我想合並那些保留匹配鍵和值的對象,同時將其他(應該是唯一的)鍵和值移動到新鍵中。

我在這方面最掙扎的地方是確定 saleRef 何時匹配。

 const newArray = array.map(sale => { if (sale.saleRef === sale.saleRef) { console.log(sale.saleRef); } }); console.log(newArray);

正如評論中提到的,您只需要一個循環,使用項目中的一個鍵來創建一個對象,然后在每個循環中將項目添加到它應該去的地方。 然后最后使用Object.values(result)從數組中獲取對象。

例如

 var data = [{ shopID: "1", registerID: "1", employeeID: "1", completed: "true", referenceNumber: "10001000150", refernceNumberSource: "Epos1", completeTime: "6/4/2017", TransactionQtySold: "2", TransactionTax: "2.82", TransactionTotalSales: "19.76", ItemSku: "380010", ItemDescription: "CRAFTSMAN'S KNIFE HVK", Supplier: "Knife Co Limited", Department: "KNIVES", Category: "FIXED BLADE", Price: "8.95", Cost: "2.63", QtySold: "1", Tax: "1.49", TotalSales: "10.44", BinLocation: "Z5" }, { shopID: "1", registerID: "1", employeeID: "1", completed: "true", referenceNumber: "10001000150", refernceNumberSource: "Epos1", completeTime: "6/4/2017", TransactionQtySold: "2", TransactionTax: "2.82", TransactionTotalSales: "19.76", ItemSku: "BIOSA", ItemDescription: "SILICONE OIL AEROSOL", Supplier: "Oil Co Ltd", Department: "CHEMICAL & CLEANING", Category: "OILS & GREASES", Price: "7.99", Cost: "3.67", QtySold: "1", Tax: "1.33", TotalSales: "9.32", BinLocation: "D" }, { shopID: "1", registerID: "1", employeeID: "1", completed: "true", referenceNumber: "10001000151", refernceNumberSource: "Epos1", completeTime: "6/4/2017", TransactionQtySold: "1", TransactionTax: "0.5", TransactionTotalSales: "3.5", ItemSku: "DIVE", ItemDescription: "DIVER'S TANK 232 BAR FILL", Supplier: "Air Co", Department: "AIR GUN", Category: "CHARGING", Price: "3", Cost: "0.01", QtySold: "1", Tax: "0.5", TotalSales: "3.5", BinLocation: "" } ] var result = {}; for (const i in data) { result[data[i].shopID] = { shopID: data[i].shopID, registerID: data[i].registerID, employeeID: data[i].employeeID, completed: data[i].completed, referenceNumber: data[i].referenceNumber, refernceNumberSource: data[i].refernceNumberSource, completeTime: data[i].completeTime, TransactionQtySold: result[data[i]] && result[data[i]].TransactionQtySold ? result[data[i]].TransactionQtySold + data[i].TransactionQtySold : data[i].TransactionQtySold, TransactionTax: data[i].TransactionTax, TransactionTotalSales: result[data[i]] && result[data[i]].TransactionTotalSales ? result[data[i]].TransactionTotalSales + data[i].TransactionTotalSales : data[i].TransactionTotalSales, saleItems: { ...(!result[data[i].shopID] || result[data[i].shopID].saleItems || {}), ['Item' + (parseInt(i, 10) + 1)]: { ItemSku: data[i].ItemSku, ItemDescription: data[i].ItemDescription, Supplier: data[i].Supplier, Department: data[i].Department, Category: data[i].Category, Price: data[i].Price, Cost: data[i].Cost, QtySold: data[i].QtySold, Tax: data[i].Tax, TotalSales: data[i].TotalSales, BinLocation: data[i].BinLocation } } } } console.log(Object.values(result)[0])

暫無
暫無

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

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