Base de datos con array

No es que vayamos a crear una base para manejar con sql, slo se trata de almacenar una serie de datos agrupados y usarla para localizar información. Es una base estática: no se pueden añadir registros, pero si se puede consultar o buscar. Por ejemplo puede ser útil para tests online sencillos.

Solución

<script>

function buscar(matriz, clave)

{

var largo, ancho, visto, ind;

largo = matriz.length;

ancho = matriz[0].length;

visto = -1;

ind = 0;

while (visto < 0) {

  if (clave == matriz[ind][0])

    visto = ind;

  ind++;

 }

return visto;

}

var libros = new Array(6);

function rellenar(libros)

{

var ind;

for (ind=0; ind < 10; ind++)

    libros[ind] = new Array(3);

ind = 0;

libros[ind][0] = "Gabriel García Márquea";

libros[ind][1] = "Cien Años de Soledad";

libros[ind][2] = "Edhasa";

ind++;

libros[ind][0] = "Mario Benedetti";

libros[ind][1] = "Geografías";

libros[ind][2] = "Alfaguara";

ind++;

libros[ind][0] = "Eduardo Galeano";

libros[ind][1] = "El Libro de los abrazos";

libros[ind][2] = "Catálogos";

ind++;

libros[ind][0] = "Juan Rulfo";

libros[ind][1] = "Pedro Páramo";

libros[ind][2] = "Paidós";

ind++;

libros[ind][0] = "Alejo Carpentier";

libros[ind][1] = "Los pasos perdidos";

libros[ind][2] = "Destino";

ind++;

libros[ind][0] = "Julio Cortázar";

libros[ind][1] = "Casa tomada";

libros[ind][2] = "Sudamericana";

}

</script>

Este es el contenido de la seeción body de la página

<body>

<! Ahora toca probar todo-->

<p>Buscamos a Julio Cortázar</p>

<script>

rellenar(libros);

var quien = "Julio Cortázar";

donde = buscar(libros, quien);

if (donde > 0)

   document.write(quien+" es autor de "+libros[donde][1]+"<br> editorial: "+libros[donde][2]+"<br>");

else

   document.write(quien+ " no está en esta lista<br>");

</script>

</body>

Explicación

Este script te permite usar una matriz o array como una "base de datos", en este ejemplo aplicada a una biblioteca. Solo se busca por autor.

Aquí la matriz o array se usa para crear una tabla, o sea, una lista de valores donde cada valor es a su vez otra lista (registros). Lo más práctico es imaginarla como una tabla.

La función busca un valor clave en la matriz de valores, comprueba si este valor es igual al contenido en la columna 0 de cada fila de la tabla (clave == matriz[ind][0]). Una vez hallada la clave la función devuelve el índice o lugar donde se encuentra el valor buscado. Si no la encuentra devuelve -1

En el ejemplo los valores claves para la búsqueda están en el primer índice de la matriz (la primera columna de la tabla) pero igualmente podría usarse cualquier otra columna.

Como lo uso

Bueno lo primero que hacemos es crear la base de datos. Lo hacemos fuera de cualquier función para que la base de datos (a la que llamo libros) sea global y pueda usarse desde cualqueir parte de la página

Ahora toca rellenar la base de datos. En nuestro caso será una tabla con tres columnas (para el autor, título y editorial) y seis filas (para seis libros, pero pueden ser más). Innvocamos al función rellenar(libros)

Ya tenemos nuestra lista de datos libros rellena, ahora toca comprobar si funciona.

En el cuerpo de la página colocamos el script que veis a la izquierda de estas lineas y abajo.

Lo primero es llamar a la función rellenar(libros) para que rellene la tabla con los datos. A continuación busca un autor (en este caso Julio Cortázar). Si lo encuentra la función devuelve el lugar de la lista donde está. Con este índice ya podemos leer su libro y editorial:

El libro es         libros[donde][1]
La editorial es   libros[donde][2]

Para presentar el resultado se usa document.write por simplicidad, en una aplicación más elaborada se usaría un bloque en el que anotar el resultado.

Si quieres trabajar este ejemplo puedes añadir un formulario para leer el nombre del autor.

En nuestro ejemplo hemos supuesto que los nombres de autores no se repiten, pero ¿y si no fuera así?.

Recuerda que esto es solo un script que puede usarse tal cual en muchos casos, pero también puede servirte para desarrollar algo más completo.