javascript

JavaScript: llenar select con arreglo

En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista desplegable o select a partir de un arreglo o array.

Te voy a enseñar dos ejemplos: uno para llenar un select con un array de tipo cadena y otro ejemplo más completo para ver cómo llenar un select con un arreglo de objetos, teniendo una propiedad como valor y otra como el texto mostrado.

Obteniendo referencia al select

Lo primero que hay que hacer para agregar elementos a un select es obtener una referencia al mismo. Esto se puede hacer con document.getElementById o querySelector.

Antes de obtener una referencia, debes asignar un id a tu select. Yo prefiero usar querySelector, así que para obtener una referencia al select puedo usar:

const $select = document.querySelector("#idDelSelect");

Fíjate que estoy prefijando mi constante con $, esto es una preferencia mía que sirve para saber que esa constante apunta a un elemento del DOM, pero no es obligatorio prefijarla así.

El select puede tener cualquier id, solo asegúrate de colocarlo correctamente al invocar a querySelector.

Agregando una opción

La forma más básica de agregar un elemento a la lista desplegable es invocando a la función appendChild del select, pasando un elemento de tipo option creada con document.createElement:

const opcion = Object.assign(document.createElement("option"), {
    value: "valor",
    text: "Texto mostrado",
});

Lo que hace Object.assign es asignar las propiedades value y text al option de manera simplificada. También podríamos tener lo siguiente:

const opcion = document.createElement("option");
opcion.value = "valor";
opcion.text = "Texto mostrado";

Una vez que tenemos la opción, la agregamos así:

$select.appendChild(opcion);

Diferencia entre value y text

El text es la opción que se muestra al usuario en la lista desplegable. El value es el valor interno que estará seleccionado cuando la opción mostrada con text sea seleccionada.

Esto es útil cuando, por ejemplo, quieres mostrar una lista de usuarios pero al obtener el valor quieres acceder al id.

Llenar select con arreglo de cadena

Ahora que tienes la referencia a la lista desplegable vamos a llenarla con un arreglo de tipo cadena, recorriendo el arreglo e invocando a appendChild por cada elemento:

const nombres = ["Parzibyte", "Terry", "Byleth", "Leon", "Shovel Knight"];
for (const nombre of nombres) {
    const opcion = Object.assign(document.createElement("option"), {
        value: nombre,
        text: nombre,
    });
    $select.appendChild(opcion);
}

Llenar select con JavaScript a partir de arreglo de objetos

En el ejemplo anterior el valor y texto de las opciones eran las mismas. Ahora veamos cómo tener valores distintos a partir de un arreglo de objetos:

const mascotas = [
    { id: 2, nombre: "Grim", edad: 4 },
    { id: 3, nombre: "Maggie", edad: 8 },
    { id: 4, nombre: "Panqué", edad: 5 },
];
for (const mascota of mascotas) {
    const opcion = Object.assign(document.createElement("option"), {
        value: mascota.id,
        text: mascota.nombre,
    });
    $select.appendChild(opcion);
}

El código es muy parecido, pero ahora el value y text son distintos.

Opción seleccionada

Independientemente de cómo hayas llenado el select, veamos cómo obtener la opción seleccionada. Para ello usamos el siguiente código de JavaScript:

const indice = $select.selectedIndex;
if (indice === -1) return; // Esto es cuando no hay elementos
const opcionSeleccionada = $select.options[indice];
console.log(`Texto: ${opcionSeleccionada.text}. Valor: ${opcionSeleccionada.value}`);

Poniendo todo junto

He colocado 2 ejemplos que puedes probar ya mismo. Para ello accede al siguiente enlace y abre la consola de depuración; al hacer clic en el botón se mostrará la opción seleccionada:

También puedes acceder al código completo en el siguiente repositorio de GitHub: https://github.com/parzibyte/ejemplos-javascript/tree/master/llenar-select-arreglo

Actualización: ya puedes ver el tutorial para llenar un select con PHP y JavaScript usando AJAX.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.