0

Necesito almacenar ciertos valores dentro de una propiedad de un JSON pero que este valor no se reinicie y pueda seguir añadiendo más valores.

los valores de la variable pedido los necesito agregar a la propiedad vendidos del objeto restaurante.

he intentado con varios métodos como slice, concat y con spread operators pero no he podido obtener el resultado que se espera.

Aquí les dejo el código con el que he intentado.

Agradezco muchísimo su ayuda y orientación.

const MENU = [
    {
        producto: "Hamburguesa sencilla",
        precio: 5000,
        codigo: "HS01"
    },

    {
        producto: "Hamburguesa especial",
        precio: 12000,
        codigo: "HE02"
    },

    {
        producto: "Papas a la francesa",
        precio: 4000,
        codigo: "PF03"
    },

    {
        producto: "Gaseosa",
        precio: 2500,
        codigo: "GS04"
    },
]

const restaurante = {
  vendidos: [],
  totalVentas: 0
}


const usuario = {
  nombre: "Andres",
  edad: 22,
  deuda: 0,
}


const MOSTAR_MENU = () => {
  console.log("Codigo - Producto - Precio")
  for (let item of MENU) {
    console.log(`${item.codigo} - ${item.producto} - ${item.precio}`)
  }
}

let pedido = []



// let total = []



const REALIZAR_PEDIDO = codigo => {
  codigo = codigo.toUpperCase()
  if (!codigo) return "no se admiten campos vacios"
  if (typeof codigo != "string") return "el valor ingresado no es valido"
  const buscar = MENU.find(item => item.codigo === codigo)
  if (!buscar) return "producto no encontrado"
  pedido.push(buscar)
  restaurante.vendidos = pedido.slice()
}



const MOSTAR_PEDIDO = () => {
  console.log("Codigo - Producto- Precio")
  for (let item of pedido) {
    console.log(`${item.codigo} - ${item.producto} - ${item.precio}`)
  }
}



const totalPagar = () => {

  for (costo of pedido) {
    usuario.deuda += costo.precio
    pedido = []//aqui se esta reinicienado la variable pedido lo cual tambien me esta reiniciando el valor de la propiedad objeto restaurante.t
  }
  return ` ${usuario.nombre}, Debes pagar un total de $${usuario.deuda}`
}

const PAGAR_PEDIDO = pago => {
  switch (true) {
    case pago < usuario.deuda:
      console.log(`no te alcanza para pagar tu deuda; necesitas agregar $${usuario.deuda - pago} mas, para poder llevarte tu compra`)
      break;
    case pago === usuario.deuda:
      console.log(`has pagado completamente tu deuda`)
      usuario.deuda = 0
      pedido = []
      break
    case typeof pago != "number":
      console.log("el valor de pago ingresado no es valido")
      break
    default:
      console.log(`has pagado completamente tu deuda y tienes un cambio de $${pago - usuario.deuda}`)
      usuario.deuda = 0
      pedido = []
      break;
  }
}



const VERVENTAS = () => {
  console.log(` las ventas realizadas fueron : `)
  for (let item of restaurante.vendidos) {
    restaurante.totalVentas += item.precio
    console.log(`${item.codigo} - ${item.producto} - ${item.precio}`)
  }
  return `para un total en ventas de: ${restaurante.totalVentas}`
}
Eduardo Jiménez
  • 2,093
  • 2
  • 6
  • 26
Geekcel
  • 11
  • 3
  • Hola, bienvenidx a SOes. Procura que en tu pregunta esté el código de esos intentos que mencionas y por qué no es el resultado esperado – Alfabravo May 04 '21 at 00:25
  • ¿Y si tu problema es que se reinicia tu variable por qué la reinicias? `pedido = []` simplemente quita esa línea – Eduardo Jiménez May 04 '21 at 01:33
  • [JSON != Objeto Javascript](https://es.stackoverflow.com/questions/164943/cu%c3%a1l-es-la-diferencia-entre-json-y-un-objeto/164944#164944) – Pablo Lozano May 04 '21 at 09:01
  • Hola Eduardo gracias por tu aporte... Me veo en la necesidad de Reiniciar la variable ya que si no lo hago en la función totalPagar, cada vez que ejecute esa función me va sumar los valores anteriores, y en caso de que se está haciendo un nuevo pedido el costo a apagar no sería el mismo en el nuevo pedido – Geekcel May 04 '21 at 13:35

1 Answers1

0

ya pude encontrar la solucion, dejo mi explicacion por si a alguien le llega a a pasar lo mismo pueda solucionar el problema.

para que los valores se me vayan almacenando en la propiedad vendidos del objeto restaurante y que adicionalmente se acomulen sin eliminar los valores previamente almacenados basta solo con modificar la funcion realizar pedido de la siguiente forma.

//almacena los valores pero se modifican tras el reinicio de la variable pedido

const REALIZAR_PEDIDO = codigo => {
  codigo = codigo.toUpperCase()
  if (!codigo) return "no se admiten campos vacios"
  if (typeof codigo != "string") return "el valor ingresado no es valido"
  const buscar = MENU.find(item => item.codigo === codigo)
  if (!buscar) return "producto no encontrado"
  pedido.push(buscar)
  restaurante.vendidos = pedido.slice()
}


//almacena los valores en el objeto restaurante de su propiedad vendidos sin que estos se modifiquen tras el reinicio de la variable pedido

const REALIZAR_PEDIDO = codigo => {
  codigo = codigo.toUpperCase()
  if (!codigo) return "no se admiten campos vacios"
  if (typeof codigo != "string") return "el valor ingresado no es valido"
  const buscar = MENU.find(item => item.codigo === codigo)
  if (!buscar) return "producto no encontrado"
  pedido.push(buscar)
  restaurante.vendidos = restaurante.vendidos.concat(pedido)//agrega los productos que se pidieron al total de ventas realizadas
}

en conclusion solo se necesitaba utilizar el metodo concat en en la propiedad vendidos del objeto restaurante y pasarle como parametro la variable pedidos

Geekcel
  • 11
  • 3