gpt4 book ai didi

javascript - 我将如何合并和转换数组中的 JS 对象

转载 作者:行者123 更新时间:2023-12-01 00:04:02 24 4
gpt4 key购买 nike

假设我有一个如下所示的对象数组:

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])

关于javascript - 我将如何合并和转换数组中的 JS 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60512504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com