![](/img/trans.png)
[英]I have an array of objects, inside each object is key called scores, and I need to find the sum of each score and push it into an array
[英]I have an Array I need to push into new Array with object mapping
這是我的數組:
[
{
"batchno": "B-PI1-1",
"unitId": 341,
"productName": "Bar Soap",
"productProfileId": 3950,
"qty": 148,
"returnQty": "20",
"rate": 10,
"salesRate": 20,
"unitName": "PC",
"gross": 200,
"net": 200,
"remarks": "sxzxz"
},
{
"batchno": "B-PI4-1",
"unitId": 341,
"productName": "Biscuit",
"productProfileId": 3951,
"qty": 700,
"returnQty": "20",
"rate": 10,
"salesRate": 60,
"unitName": "PC",
"gross": 200,
"net": 200,
"remarks": "zxzxzx"
}
];
我需要推入一個新數組,但最后一個被雙推:
if (this.primengTableHelper.initialRecords.length > 0) {
this.primengTableHelper.initialRecords.map((item: any) => {
console.log('item', item);
this.singleItem.batchNo = item.batchno;
this.singleItem.unitId = item.unitId;
this.singleItem.productName = item.productName;
this.singleItem.productProfileId = item.productProfileId;
this.singleItem.qty = item.qty;
this.singleItem.returnQty = item.returnQty
this.singleItem.rate = item.rate;
this.singleItem.salesRate = item.salesRate;
this.singleItem.unitName = item.unitName;
this.singleItem.gross = item.net;
this.singleItem.net = item.net;
this.singleItem.remarks = item.remarks;
this.createOrEditDamageStockDto.paymentNO = this.voucherNO;
this.createOrEditDamageStockDto.invoiceDate =
this.maxInvoiceDateFilter.toString();
this.createOrEditDamageStockDto.damageStockDetailsListDto
.push(this.singleItem);
});
無論進行多少次迭代,您都繼續推動this.singleItem
,它是一個object。 在每次迭代中,單個 object 都會發生變異,然后再次推送,從而導致對同一 object 的多個引用。
相反,請確保在每次迭代中創建一個新的 object。 同時避免所有這些單獨的分配,而是使用擴展語法:
const newItem = {...this.singleItem, ...item};
// Make other changes to `newItem` properties if needed...
// ...
// Push the new object:
this.createOrEditDamageStockDto.damageStockDetailsListDto
.push(newItem);
不是你的問題,但以下幾行在循環中沒有意義,因為它們不依賴於迭代的item
:
this.createOrEditDamageStockDto.paymentNO = this.voucherNO;
this.createOrEditDamageStockDto.invoiceDate =
this.maxInvoiceDateFilter.toString();
這些語句將始終在每次迭代中進行相同的分配。 所以把它們放在那個循環之外。
請注意,當您不使用結果時,不應使用.map
。 然后只需使用.forEach
。 另一方面,您可以使用.map
創建一個數組以分配給this.createOrEditDamageStockDto.damageStockDetailsListDto
。 在您的情況下這是否是一個好主意,取決於該數組在循環之前是否已經存在,並且是否具有應該保留在那里的內容。
我不確定我是否理解這個問題。 您有一個包含兩個對象的數組。 您是否只是想要一個包含三個對象的新數組,其中最后一個 object 與第二個相同? 如果是這樣,您可以使用 ES6 擴展運算符並執行以下操作:
const initialRecords = [
{
"batchno": "B-PI1-1",
"unitId": 341,
"productName": "Bar Soap",
"productProfileId": 3950,
"qty": 148,
"returnQty": "20",
"rate": 10,
"salesRate": 20,
"unitName": "PC",
"gross": 200,
"net": 200,
"remarks": "sxzxz"
},
{
"batchno": "B-PI4-1",
"unitId": 341,
"productName": "Biscuit",
"productProfileId": 3951,
"qty": 700,
"returnQty": "20",
"rate": 10,
"salesRate": 60,
"unitName": "PC",
"gross": 200,
"net": 200,
"remarks": "zxzxzx"
}
]
const recordsWithDuplicate = [
...initialRecords,
initialRecords[initialRecords.length - 1]
]
我希望這有幫助:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.