【发布时间】:2023-03-27 19:29:02
【问题描述】:
我有一个数据,例如:
{
"carts":[
{
"id":791,
"name":"CAPE DISCOVERY SHIRAZ",
"image":"http://example.com/foo.png",
"price":20000,
"additionals":[
[
{
"id":792,
"name":"Extra Cheese",
"price":20000,
"count":0,
"stock":80
},
{
"id":790,
"name":"Extra Beef",
"price":30000,
"count":0,
"stock":16
},
{
"id":788,
"name":"Extra Mayonnaise",
"price":50000,
"count":4,
"stock":34
}
],
[
{
"id":792,
"name":"Extra Cheese",
"price":20000,
"count":0,
"stock":80
},
{
"id":790,
"name":"Extra Beef",
"price":30000,
"count":0,
"stock":16
},
{
"id":788,
"name":"Extra Mayonnaise",
"price":50000,
"count":4,
"stock":34
}
]
],
"count":2
}
]
}
当我尝试循环additionals 的数组以通过其id 增加/减少count 属性时,结果是所有具有相同id 的count 属性也受到影响。
这是我用来递增和递减的一种方法
//Get the last additional of an item then get the correspond additional and increment its count
addAdditional(event, productId, additionalId) {
let data = this.carts.filter((e) => e.id == productId)[0]?.additionals
data[data.length - 1].filter(e => e.id == additionalId)[0].count++
return;
},
//Get the last additional of an item then get the correspond additional and decrement its count
removeAdditional(event, productId, additionalId) {
let data = this.carts.filter((e) => e.id == productId)[0]?.additionals
data[data.length - 1].filter((e) => {
if (e.id == additionalId && e.count > 0) {
e.count--;
}
return e;
});
},
我将进一步解释:
productId 指的是键值 791,附加 ID 指的是 additionals 属性内的 id。 count 属性指的是它尝试购买的商品数量。 count 与 additionals 的数量同步。
如果我将 count 的 Extra Cheese 的值增加 5,那么奇怪的东西,数组中的第二项 (Extra Cheese) 也更新为值 5。
另外,当我使用 Vue Devtools 手动更改值时会发生这种情况。
【问题讨论】:
-
您想一次只更改一个值吗?在这种情况下,您必须提供该数组中该特定项目的索引。另外请使用 Vue.set api 设置/取消设置数组/对象中的值,以便 vue 重新渲染列表。
-
是的,我想一次更改一个值。我还没有提供索引吗?在我看来,我已经做到了。好的,将阅读并尝试t,感谢您的帮助
标签: javascript vue.js ecmascript-6 vuejs2