arrays - 打字稿合并2个数组并增加数量,如果它们具有相同的ID
问题描述
我正在处理我的 Angular 8 项目,如果它们在对象中具有相同的值,我想将 2 个数组合并为 1 个并增加 qty。我自己尝试了几次,但效果并不好。
mergedOrderList: any[]= [];
lstOldOrder: any[] = [
{id: "", products_id: "", qty: 1, ...},
{id: "", products_id: "", qty: 1, ...},
{id: "", products_id: "", qty: 1, ...},];
lstNewOrder: any[] = [
{id: "", products_id: "", qty: 1, ...},
{id: "", products_id: "", qty: 1, ...},
{id: "", products_id: "", qty: 1, ...},];
lstNewOrder.forEach(newOrder => {
let isDubplicated: boolean = false;
lstOldOrder.forEach(oldOrder => {
if (newOrder.products_id == oldOrder.products_id) {
oldOrder.qty += newOrder.qty;
isDubplicated = true;
mergedOrderList.push(oldOrder);
}
});
if (!isDubplicated) {
mergedOrderList.push(newOrder)
}
});
我确实喜欢这样,并且当它们都具有相同的 products_id 时它们可以工作。但是当新订单没有 products_id 时。他们跳过我的旧订单,只将新订单添加到列表中。我不太确定我做对了。谢谢
解决方案
看到的问题是,如果
新列表项与旧列表中的任何项匹配,您只会从lstOldOrder
in添加数据。mergedOrderList
product_id
因此,如果所有项目都是新的,您将无法从旧列表中看到任何项目lstNewOrder
相反,您应该做的是:
将项目添加到,mergedOrderList
但如果匹配则增加数量。
mergedOrderList = [];
lstOldOrder = [
{ id: "1", products_id: "", qty: 1 },
{ id: "2", products_id: "", qty: 1 },
{ id: "3", products_id: "", qty: 1 },
];
lstNewOrder = [
{ id: "4", products_id: "", qty: 1 },
{ id: "5", products_id: "", qty: 1 },
{ id: "1", products_id: "", qty: 1 },
];
lstNewOrder.forEach((newOrder) => {
Oindex = -1;
lstOldOrder.forEach((item, index) => {
if (item.id == newOrder.id) {
Oindex = index; // Getting the Index of that item in old array.
}
});
if (Oindex != -1) { // if that item was in old Array
newOrder.qty += lstOldOrder[Oindex].qty; // Increase Quantity in newOrderItem
lstOldOrder.splice(Oindex, 1); // Delete that Item from OldArray
}
mergedOrderList.push(newOrder); // Add the Item in Merged
});
mergedOrderList.concat(lstOldOrder); // Finally add all the remaining Items
代码中的所有边缘情况都没有得到正确处理,对此感到抱歉。随意编辑我的答案,它可能会帮助别人
推荐阅读
- javascript - Angular - 在复选框上添加事件
- python-3.x - Unable to query on Partition key in DyanmoDB by boto3
- css - What is this variable kind of thing in css?
- php - How to ignore a column when update in mysql?
- elixir - Elixir: what is right way for fetching external API in separate processes
- javascript - Javascript:getFullYear() 在 IE 11 中返回负值
- python - What is the equivalent of array_column in python3
- json - Split JSON into two individual JSON objects using Nifi
- django - psycopg2.DataError:整数超出范围
- c# - UWP (Windows 10) 应用程序提交失败