Archivo
Archivo
Etiquetas
Etiquetas
Entradas populares de este blog
Hacer un select readonly con jQuery
Listado de palabras en castellano
Arrays la pata coja de JavaScript
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Los que me conocen o que han compartido trabajo conmigo en cuanto a tema de programación son testigos de mi ‘amor’ (irónicamente hablando) hacia javascript. Personalmente que es un lenguaje que se creó para un objetivo muy limitado y que por el auge de la propia web 2.0 e internet se ha ido parcheando cada vez más.
En concreto con los arrays, es difícil imaginarse un lenguaje en el que no puedas decir que a=b y que luego si modificas a no te cambie b. O crear arrays asociativos, o insertar en medio de un array un elemento. Pues todo esto son puntos flacos de javascript. Como diría Jack El Destripador ‘vamos por partes’.
Asignar un array a otro
Javascript en el caso de arrays no permite igualar uno a otro, o si lo permite pero ambos son punteros a una misma dirección de memoria, por lo que modificando uno modificas el otro. El caso es declarar ambos arrays por separado y hacer un concat de uno con el otro, para arrays multidimensionales ya no es tan sencillo, te tienes que hacer una función recursiva para hacerlo.
Arrays Asociativos
Esta es la gran cagada de este lenguaje, tu puedes decir que a[‘país’] = España, pero en realidad lo que estas diciendo es que a tiene una propiedad llamada país y que esta es España, o sea a.país = España. El array a no tendrá longitud si no la has definido en el constructor y no tendrá un valor para recorrerlo con la función each de jquery hasta que no digas a[0] = x.
Insertar en el medio de un array
Tampoco hay una función para insertar un elemento por ejemplo entre el indice2 y el 3, para ello hay que crear el 4 igualarlo al 3, luego el 3 igualarlo a lo que quieres, y esto ya se complica si dentro hay arrays multidimensionales porque no puedes copiarlos así como así, y se complica más si es asociativo porque no puedes recorrerlo con un for.
En fin aquí os dejo un código para copiar un array multidimensional en otro, ambos con direcciones de memoria distintas:
function copiarArray(origen,copia){
for(var clave in origen){
if(typeof origen[clave] == 'object'){
var elementos = origen[clave].length;
copia[clave] = new Array(elementos);
copiarArray(origen[clave],copia[clave]);
}
else
copia[clave] = origen[clave];
}
}
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Manuel.
En mi opinión, Javascript es uno de los lenguajes más flexibles que conozco.
Pienso que en un entorno como el navegador, donde el tiempo de descarga es importante, prima la velocidad y el uso de recursos. El hecho de que al hacer la asignación a = b
de dos arrays, y que se asigne la referencia de b, en lugar de una copia, no supone una restricción importante, y en muchos casos, puede suponer un mejor uso de los recursos.
Un saludo
Muchas gracias en cualquier caso por el código para clonar, me ayudó mucho.
un saludo.