
Error en JS al devolver datos ingresados por el usuario
Publicado por Mariana (10 intervenciones) el 04/11/2022 22:42:39
Hola! Estoy intentando resolver un ejercicio que le pide al usuario cargar datos de discos: al darle click al botón Cargar discos con onclick se le pedirá:
- el nombre del disco,
- autor o banda,
- código único del disco,
- nombre de pista y su duración medida en segundos. Si la duración es igual o mayor a 180 segundos, al imprimirse el número deberá pintarse en color rojo.
El usuario puede ingresar la cantidad de pistas que quiera y cuando ya no quiera seguir cargando, se le preguntará si quiere cargar otro disco. Después al darle al botón Mostrar discos el programa va a devolver todos los datos que se ingresaron.
El programa me está funcionando bien hasta la parte que devuelve los nombres de las pistas y su duración. Es decir, supongamos que cargo un disco de Queen con dos canciones y después cargo uno de Coldplay con 2 canciones. Al mostrar los datos se ven 4 canciones: en Queen tengo las propias más las de Coldplay y viceversa. Se están pisando los datos.
La pregunta sería: qué cosa debería modificar en las funciones cargarDatosDelDisco y en mostrarDiscosCargados para corregir ése error? Y cómo puedo hacer que la duración de 180 para arriba aparezca en rojo al imprimirse?
- el nombre del disco,
- autor o banda,
- código único del disco,
- nombre de pista y su duración medida en segundos. Si la duración es igual o mayor a 180 segundos, al imprimirse el número deberá pintarse en color rojo.
El usuario puede ingresar la cantidad de pistas que quiera y cuando ya no quiera seguir cargando, se le preguntará si quiere cargar otro disco. Después al darle al botón Mostrar discos el programa va a devolver todos los datos que se ingresaron.
El programa me está funcionando bien hasta la parte que devuelve los nombres de las pistas y su duración. Es decir, supongamos que cargo un disco de Queen con dos canciones y después cargo uno de Coldplay con 2 canciones. Al mostrar los datos se ven 4 canciones: en Queen tengo las propias más las de Coldplay y viceversa. Se están pisando los datos.
La pregunta sería: qué cosa debería modificar en las funciones cargarDatosDelDisco y en mostrarDiscosCargados para corregir ése error? Y cómo puedo hacer que la duración de 180 para arriba aparezca en rojo al imprimirse?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
class DatosDelDisco {
constructor(nombre, autor, codigo) {
this.nombre = nombre,
this.autor = autor,
this.codigo = codigo;
}
// pistas guardará el nombre y la duración de cada canción
pistas = [];
}
let todasLasPistas = [];
const pedirPista = () => {
let nombrePista = "";
let duracionPista;
do {
nombrePista = pedirDato("Ingrese el nombre de la pista");
duracionPista = cargarDuracionDelDisco();
todasLasPistas.push ({
nombre: nombrePista,
duracion: duracionPista
})
} while (confirm("Desea cargar otra pista?"))
return todasLasPistas;
}
const cargarDuracionDelDisco = () => {
let segundos = parseInt(prompt("Ingrese la duración de la pista medida en segundos"));
return segundos;
}
// Array donde se guardarán los discos a medida que son cargados
let discos = [];
// Variables a llenar al cargar los datos
let nombre = "";
let autor = "";
let codigo;
let pistas;
// Función para cargar los datos del disco al darle click al botón Cargar
function cargarDatosDelDisco() {
do {
nombre = pedirDato("Ingrese el nombre del disco");
autor = pedirDato("Ingrese el autor del disco");
codigo = cargarCodigoDelDisco();
pistas = pedirPista();
discos.push({
nombre: nombre,
autor: autor,
codigo: codigo,
pista: pistas // VER: CREO QUE EL ERROR PODRÍA ESTAR ACÁ
});
}
while (confirm("Desea cargar otro disco?"))
}
function mostrarDiscosCargados() {
let html = "";
discos.forEach( disco => {
html += `<ul>
<li>Nombre del disco: <strong> ${disco.nombre} </strong> </li>
<li>Autor/ banda: <strong> ${disco.autor} </strong> </li>
<li>Código único del disco: <strong> ${disco.codigo} </strong> </li>
<div>
<ul>Lista de pistas y duración: ${disco.pista.map(pistas => {
// QUÉ ESTÁ MAL ACÁ QUE HACE QUE SE PISEN LOS DATOS EN LAS PISTAS CARGADAS EN CADA DISCO?
// CARGO 2 DISCOS CON 2 CANCIONES C/U Y AL IMPRIMIR APARECEN 4 CANCIONES POR CADA DISCO (2 DEL DISCO CORRECTO Y 2 QUE NO CORRESPONDEN)
return `<li> <strong> ${pistas.nombre}</strong>: <span class= "highlight__red"> ${pistas.duracion} </span> segundos</li> `
})}
</ul>
<div>
</ul>`;
})
document.getElementById("coleccion").innerHTML = html;
}
Saludos y muchas gracias!
Valora esta pregunta


0