我有一個物件,我正在推送到陣列,同時推送我需要限制重復項,如果屬性有任何更改,則相應地更新陣列?
[{
Id: "a134",
Name: "Name -",
Company: "001",
Product :"01"
quantity :1
},
{
Id: "a135",
Name: "Name -1",
Company: "002",
Product :"03"
quantity :2 -----> (Previous event.target.name)
},
{
Id: "a135",
Name: "Name -1",
Company: "002",
Product :"03"
quantity :3 ---> (current event.target.name)
}
]
如果我正在推入陣列,則可能有機會更新數量如何實作以下結果
[{
Id: "a134",
Name: "Name -",
Company: "001",
Product :"01"
quantity :1
},
{
Id: "a135",
Name: "Name -1",
Company: "002",
Product :"03"
quantity :3 ---> (current event.target.name)
}
]
現在我的代碼是
if(event.target.value!='')
{
const searchObj = this.myList.find(({ Id,Product, Company }) => Product === index);
if (searchObj)
{
console.log('searchObj',searchObj);
resultVal = { ...searchObj, quantity:parseInt(event.target.value)};
if (!this.newProductList.some(e => e.Product === resultVal.Product))
{
this.newProductList.push(resultVal);
}
}
}
uj5u.com熱心網友回復:
我認為陣列是錯誤的資料型別。我更喜歡使用地圖。
這當然只有在 Id 是唯一的情況下才有效,因為這是最好用作鍵的:
const myMap = new Map([["a134",{
Name: "Name -",
Company: "001",
Product :"01",
quantity :1
}]]);
然后很容易在更新數量或添加新專案之前檢查專案是否已經存在。
const id = "a134"; // or "a135" for a new entry
const newItem = { Name: "Name B",
Company: "002",
Product :"012",
quantity :1
}
if(myMap.has(id)){
const item = myMap.get(id);
myMap.set(id, {...item, quantity: item.quantity 1})
} else {
myMap.set(id,newItem);
}
console.log(myMap) // Map {'a134' => { Name: 'Name A', Company: '001', Product:'01', quantity: 2 } }
uj5u.com熱心網友回復:
這最好通過使用不同的資料結構來解決:使用普通物件,鍵控Id:
let data = {
"a134": {
Id: "a134"
Name: "Name -",
Company: "001",
Product: "01"
quantity: 1
},
"a135": {
Id: "a135",
Name: "Name -1",
Company: "002",
Product: "03"
quantity: 2
},
};
要更新/添加不要推送,而是設定物件鍵的值。例如:
// Let's say we want to add/update with this object:
let objToAdd = {
Id: "a135",
Name: "Name -1",
Company: "002",
Product: "03"
quantity: 3
}
// ...then just do:
data[objToAdd.Id] = objToAdd;
這將更新或“插入”。在上述情況下,它將更新:
let data = {
"a134": {
Id: "a134"
Name: "Name -",
Company: "001",
Product: "01"
quantity: 1
},
"a135": {
Id: "a135",
Name: "Name -1",
Company: "002",
Product: "03"
quantity: 3
},
};
如果您需要陣列格式,那么只需執行以下操作:
let arr = Object.values(data);
...但試圖堅持使用陣列是低效代碼的保證。它只是不是在這里作業的正確工具。您應該調整您的代碼以在整個程序中使用純物件表示。您可以迭代物件中的值,可以從物件中洗掉專案、更新、添加等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318006.html
標籤:javascript 数组 目的 重复 阿尔
上一篇:XML到物件映射
