【发布时间】:2021-05-12 21:54:32
【问题描述】:
我有以下对象数组:
const lineItems = [
{
"lineNumber": "0",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 10,
"quantityUOM": "Unit",
"batchNumber": "LO123678",
"receivedQty": 5,
"shippedQty": 10,
"itemCode": "Packagetest1"
},
{
"lineNumber": "1",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 40,
"quantityUOM": "Unit",
"batchNumber": "LO123678",
"receivedQty": 4,
"shippedQty": 20,
"itemCode": "Packagetest1"
},
{
"lineNumber": "2",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 10,
"quantityUOM": "Unit",
"receivedQty": 5,
"shippedQty": 30,
"itemCode": "Packagetest1"
},
{
"lineNumber": "3",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 10,
"quantityUOM": "Unit",
"receivedQty": 10,
"shippedQty": 30,
"itemCode": "Packagetest1"
}
];
期待输出:
[
{
"lineNumber": "0",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 50,
"quantityUOM": "Unit",
"batchNumber": "LO123678",
"receivedQty": 9,
"shippedQty": 30,
"itemCode": "Packagetest1"
},
{
"lineNumber": "2",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 20,
"quantityUOM": "Unit",
"receivedQty": 15,
"shippedQty": 60,
"itemCode": "Packagetest1"
}
]
基于 batchNumber 和 item 值分组的数量、receivedQty 和 shippingQty 等属性的总和。前两个按批次编号和项目分组,但最后两个行项目仅按项目值分组。
groupedVariantLineItems() {
let result = [];
for( let i = 0; i < this.variantLineItems.length; i++ ) {
let isExists = false;
for( let j=0; j<result.length; j++ ) {
if( typeof this.variantLineItems[i].batchNumber != "undefined" && result[j].batchNumber == this.variantLineItems[i].batchNumber && result[j].item == this.variantLineItems[i].item ) {
isExists = true;
result[j].quantity+= (this.variantLineItems[i].quantity!= undefined) ? Number(this.variantLineItems[i].quantity) : 0;
result[j].shippedQty += (this.variantLineItems[i].shippedQty != undefined) ? Number(this.variantLineItems[i].shippedQty) : 0;
result[j].receivedQty += (this.variantLineItems[i].receivedQty != undefined) ? Number(this.variantLineItems[i].receivedQty) : 0;
result[j].quantity= ( isNaN(result[j].quantity) ) ? 0 : result[j].quantity;
result[j].shippedQty = ( isNaN(result[j].shippedQty) ) ? 0 : result[j].shippedQty;
result[j].receivedQty = ( isNaN(result[j].receivedQty) ) ? 0 : result[j].receivedQty;
break;
} else if( typeof this.variantLineItems[i].batchNumber == "undefined" && result[j].item == this.variantLineItems[i].item ) {
isExists = true;
result[j].quantity+= (this.variantLineItems[i].quantity!= undefined) ? Number(this.variantLineItems[i].quantity) : 0;
result[j].shippedQty += (this.variantLineItems[i].shippedQty != undefined) ? Number(this.variantLineItems[i].shippedQty) : 0;
result[j].receivedQty += (this.variantLineItems[i].receivedQty != undefined) ? Number(this.variantLineItems[i].receivedQty) : 0;
result[j].quantity= ( isNaN(result[j].quantity) ) ? 0 : result[j].quantity;
result[j].shippedQty = ( isNaN(result[j].shippedQty) ) ? 0 : result[j].shippedQty;
result[j].receivedQty = ( isNaN(result[j].receivedQty) ) ? 0 : result[j].receivedQty;
break;
}
}
if( !isExists ) {
result.push( this.variantLineItems[i] );
}
}
return result;
}
上面的代码给出了前两个具有批号的行项目的正确输出,但对于后两个不正确。
【问题讨论】:
-
检查batchNumber属性是否存在并按其分组是否足够,如果不存在则按item属性分组?
-
不,我这样做并创建了一个新对象,但它再次不起作用。感谢@Nermin 的认可
标签: javascript arrays json typescript ecmascript-6