【问题标题】:Vue app, Javascript, conditionally adding an Object to an arrayVue应用程序,Javascript,有条件地将对象添加到数组中
【发布时间】:2019-03-27 13:28:53
【问题描述】:

我有一个餐厅菜单,它是一个对象数组,每个对象都具有以下属性:-

  • 姓名
  • id - id 是自动生成的
  • 数量
  • options - 它本身是一个包含两个值对的数组 -size & price

现在,我想允许用户在验证购物车中不存在所选商品后将商品添加到购物车,我面临的问题是,每个商品都有一个 Id,但同时时间有两种或多种不同的大小

这是我的代码

export default {
data(){
  return {
    cart: []
  }
}

//...
methods: {
    addItem(pizza, options){
      let selectedPizza= {
        id: pizza.id,
        name: pizza.name,
        size: options.size,
        price: options.price
        quantity: 1
      }
      
      if(this.cart.length > 0) {
        this.cart.forEach(item => {
          if(item.name === selectedPizza.name && item.size === selectedPizza.size && item.id === selectedPizza.id) {
            return item.quantity++
          } else {
            this.cart.push(selectedPizza)
          }
        })
      } else {
        this.cart.push(selectedPizza)
      }
    } 
  }
}

上面的代码可以正常工作,除非我尝试添加不同大小的同一个披萨,因为在这种情况下,id 是重复的,因为每个项目都有一个 ID,不是每个披萨大小都有一个,任何人都可以想的解决方法? 提前谢谢..

【问题讨论】:

  • 一个披萨有多种尺寸的理想行为是什么?
  • 很抱歉你的问题对我来说不够清楚,在菜单中,每个披萨都有两种尺寸,所以我想让用户不仅可以添加不同的披萨,还可以添加不同的披萨尺寸。例如,他想要两个玛格丽特比萨饼,一个大号一个小号..
  • 所以数据结构问题不属于编码问题?如果您不能帮忙,请删除您的负面评价吗?!

标签: javascript arrays vue.js javascript-objects


【解决方案1】:

这似乎更像是一个数据结构问题,而不是语法或编码问题。在您的情况下,我会添加一个重复的比萨饼,每种尺寸一个。这样你仍然可以增加金额。即:

  • 菠萝披萨(小)1x

  • 菠萝披萨(大)1x

    如果您愿意,您必须重组数据

  • 菠萝披萨 2x(小号和大号)

您的问题并没有真正表明您想要什么解决方案。

【讨论】:

  • 所以你的建议是,在菜单项中,我应该有例如菠萝披萨(大)作为一个项目,另一个单独的菠萝(小)对吗?我知道这确实有道理,但我认为应该有一种方法可以让相同的比萨饼具有不同的大小,并且还可以让我拥有所需的功能。
猜你喜欢
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 2017-12-26
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多