Uso de Arrays para almacenar datos
Guardar datos en un Array
Usamos un elemento input para leer el dato y pasarlo al array de contactos
- El array tiene que ser una variable global para estar disponible en todo el script
- Antes de guardar el dato es necesario validarlo
- Lo pasamos al array
- Llamamos a las funciones que actualizan los listados en el documento
- Mostramos un mensaje de estado
let contactos = ["Alberto", "Lena", "Nico"];
function addContacto() {
let mensaje = "";
let clase = "";
let contacto = document.querySelector("#in_nombre").value;
contacto = validaTexto(contacto);
if (contacto) {
contactos.push(contacto);
creaListado();
creaSelect();
mensaje = "Contacto añadido al listado";
clase = "confirma";
} else {
mensaje = "Dato no válido";
clase = "error";
}
muestraMensaje(mensaje, "#mens-intro", clase);
}
function validaTexto(texto) {
let validado = texto.trim();
while (validado.indexOf(" ") != -1) {
validado = validado.replaceAll(" ", " ");
}
if (validado.length < 3) {
return false;
}
return validado;
}
Pasar los elementos del array al DOM
Recorremos el array con un bucle y generamos un elemento li para cada contacto, y también añadimos un botón para ocultar el listado
A esta función podemos acceder desde un botón que genere el listado, y también podemos llamarla cada vez que añadimos un contacto nuevo a la lista
- Preparo bucle para el array
- En cada iteración genero un elemento li
- Cuando termina el bucle añadimos el listado al DOM
- Para ocultarlo eliminamos el elemento ul del DOM
function creaListado() {
ocultaListado();
const listado = document.createElement("ul");
for (let i = 0; i < contactos.length; i++) {
const contacto = contactos[i];
const elemento_lista = document.createElement("li");
elemento_lista.textContent = contacto;
listado.append(elemento_lista);
}
document.querySelector(".lista-contactos").append(listado);
muestraMensaje("listado actualizado", "#mens-lista");
}
function ocultaListado() {
document.querySelector(".lista-contactos").innerHTML = "";
muestraMensaje("Listado cerrado correctamente", "#mens-lista");
}
function muestraMensaje(mensaje, selector, clase) {
document.querySelector(selector).textContent = mensaje;
let estilo = clase ? "mensajes " + clase : "mensajes";
document.querySelector(selector).className = estilo;
}
Editar y Eliminar elementos del Array
Construimos un desplegable con los elementos del array junto a 2 botones para eliminar o actualizar el seleccionado
El primer paso es generar el desplegable al pulsar un botón, luego añadimos las funciones para eliminar o editar el elemento seleccionado
- Necesitamos un bucle como en el pirmer apartado pero para generar elementos option en lugar de li
- El botón elminar borra del array elemento seleccionado, y a continuación reconstruye la lista de contactos y el select
- Actualizar hace lo mismo, pero modificando la entrada correspondiente del array
function creaSelect() {
vaciaSelect();
for (let i = 0; i < contactos.length; i++) {
const contacto = contactos[i];
const elemento_lista = document.createElement("option");
elemento_lista.textContent = contacto;
elemento_lista.setAttribute('value', i);
document.querySelector('#sel_contacto').append(elemento_lista);
}
muestraMensaje('listado creado correctamente', '.mens-select');
}
function vaciaSelect() {
document.querySelector('#sel_contacto').innerHTML = '';
}
function eliminaContacto() {
let posicion = parseInt(document.querySelector('#sel_contacto').value);
let eliminar = confirm('Confirma eliminar a ' + contactos[posicion]);
if (eliminar) {
contactos.splice(posicion, 1);
creaListado();
creaSelect();
muestraMensaje('Contacto eliminado correctamente', '.mens-select');
} else {
muestraMensaje('Operación Cancelada', '.mens-select');
}
}
function editaContacto() {
let posicion = parseInt(document.querySelector('#sel_contacto').value);
nuevo_contacto = prompt('Actualiza los datos', contactos[posicion]);
nuevo_contacto = validaTexto(nuevo_contacto);
if (nuevo_contacto) {
contactos.splice(posicion,1,nuevo_contacto);
creaListado();
creaSelect();
muestraMensaje('Contacto editado correctamente', '.mens-select');
} else {
muestraMensaje('Datos no válidos. No se puede editar el contacto', '.mens-select', 'error');
}
}