Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

140
Vistas
Novato que tiene algunos problemas de matriz

Estoy haciendo mi primer proyecto de código y tengo algunos problemas con las matrices que cambian sus valores aparentemente por su cuenta.

console.log(permanentDeck) debería devolver 7 cartas, pero parece que se han quitado

He buscado más de una vez alguna línea que cambie el valor de permanentDeck, pero no encontré ninguna

Alguien me puede ayudar a saber en que linea pasa esto??

 var playerClass = "Warrior" const examcard1 = {id:1, cost: 1, name:"Slash", text:"Deal 100% damage"} const examcard2 = {id:2, cost: 1, name:"Block", text:"Gain 1 block"} const examcard3 = {id:3, cost: 2, name:"Heavy Strike", text:"Deal 200% damage\nApply 1 vunerable"} const starterWarriorDeck = [examcard1, examcard1, examcard1, examcard2, examcard2, examcard2, examcard3] var deck var permanentDeck = [] switch(playerClass){ case "Warrior": permanentDeck = starterWarriorDeck } var drawPile = [] var hand = [] function shuffle(array){ let currentIndex = array.length, randomIndex; // While there remain elements to shuffle. while (currentIndex != 0) { // Pick a remaining element. randomIndex = Math.floor(Math.random() * currentIndex); currentIndex--; // And swap it with the current element. [array[currentIndex], array[randomIndex]] = [ array[randomIndex], array[currentIndex]]; } return array; } function restockDrawPile(){ drawPile = shuffle(deck); } function startBattle(){ deck = permanentDeck; restockDrawPile(); } function startPlayerTurn(){ drawCards(5) } function drawCards(cardsToDraw){ for(i = 0; i < cardsToDraw; i++){ let nextCard = drawPile.pop(); hand.push(nextCard); } } var handView = new PIXI.Container() startBattle(); startPlayerTurn(); console.log(permanentDeck); console.log(deck); console.log(drawPile); console.log(hand); ´´´
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

si agrega console.log(starterWarriorDeck); , encontrará que también se ha modificado. Esto se debe a que las matrices se pasan por referencia, por lo que en las siguientes líneas, no está haciendo una copia de la matriz, solo otra referencia a la misma matriz:

 permanentdeck = starterWarriorDeck; deck = permanentdeck; console.log(Object.is(deck, starterWarriorDeck)) // true

Debe copiar explícitamente el contenido en la nueva matriz. Hay varios métodos para hacer una copia superficial en JS, pero los más claros en este caso serían utilizar el operador de propagación... o el método .from. Ejemplos:

 permanentDeck = [...starterWarriorDeck] deck = Array.from(permanentDeck)

Información relevante: https://www.freecodecamp.org/news/how-to-clone-an-array-in-javascript-1d3183468f6a/

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando asigna una matriz (p. ej., cubierta permanente) a una variable (p. ej., cubierta) con deck = permamentDeck , simplemente asigna una referencia a la misma estructura de datos subyacente a la cubierta. Esto significa que deck y mazo permanentDeck apuntarán a la misma entidad y si modifica cualquiera de los dos, modifica lo mismo a lo que hacen referencia ambas variables.

Debe asegurarse de hacer una copia verdadera de la matriz para poder modificar deck sin modificar la plataforma permanentDeck . Uno de los métodos simples para lograr una "copia superficial" de este tipo es usar la slice de división de una matriz javascript.

 // make a shallow copy of the array deck = permanentDeck.slice();

Eche un vistazo a varios métodos para copiar matrices. https://www.freecodecamp.org/news/how-to-clone-an-array-in-javascript-1d3183468f6a/

También asegúrese de comprender y ser consciente de la diferencia entre una copia superficial y una copia profunda de matrices que consisten en referencias a objetos.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda