2009-08-20 11 views
9

Tengo un problema para concatenar dos matrices asociativas en JavaScript. Debajo está el código de muestra:concat (en JavaScript) no funciona para matrices asociativas

var firstArray = new Array(); 
firstArray.c1 = "sam"; 
firstArray.c2 = "kam"; 
var secArray = new Array(); 
secArray.c3 = "sam";  
secArray.c4 = "kam"; 
var res = firstArray.concat(secArray); 

¿Es esta una limitación conocida?

¿Cuál es la mejor manera de lograrlo?

+0

wow .... ¿puedo saber por qué diablos soy downvoted ........ preguntando está mal aquí .. ?? pls show ur face ur friend ....... – RameshVel

+1

No te voté, pero creo que sería algo que ver con el hecho de que realmente no explicas el problema que estás viendo –

+0

hermano di toda la información que obtuve ... (concatenando dos matrices asociativas) ... no es suficiente ... la gente hace preguntas porque no saben ... bien ... – RameshVel

Respuesta

20

no está utilizando Array funcionalidad - sólo Object funcionalidad. En JavaScript, Object es una matriz asociativa: utiliza Array para matrices indexadas por enteros. Si lo hizo

var firstArray = new Array(); 
firstArray.push("sam"); 
firstArray.push("kam"); 
var secArray = new Array(); 
secArray.push("sam");  
secArray.push("kam"); 
var res = firstArray.concat(secArray); 

entonces concat funcionaría como se esperaba.

Si realmente se desea combinar las matrices asociativas, hacer:

for (var attr in src_array) { dest_array[attr] = src_array[attr]; } 

Esto, por supuesto sobrescribir las claves existentes en dest_array que tienen homólogos en src_array.

+0

gracias por la respuesta ..esto es lo que esperaba ... – RameshVel

2

Prueba de esto,

var firstArray = new Array("sam","kam"); 
var secArray = new Array("sam","kam"); 
var res = firstArray.concat(secArray); 
1

JavaScript no tiene matrices asociativas, tiene hash de objetos. Está creando una matriz y asignando valores a algunas de sus propiedades, no en la misma matriz.

Su concat no funcionará porque los valores son propiedades del objeto. Para hacer un concat de la forma en que lo tienes necesitarás combinar los dos objetos. YUI, jQuery y los otros frameworks de JavaScript proporcionan métodos útiles para hacer justamente eso.

1

Estrictamente hablando, esas no son matrices asociativas: son matrices de longitud cero, con propiedades nombradas adicionales. La asignación de esas propiedades funciona porque las matrices también son objetos en JavaScript; pero eso no los convierte en una matriz asociativa. Es mejor mirarlos como hashes.

Los métodos de matriz como concat solo funcionarán con los elementos indexados numéricamente de las matrices, no con las propiedades de los objetos, incluso si esos objetos son matrices.

1

Las matrices en JavaScript solo tienen teclas numéricas. Solo los objetos pueden tener propiedades no numéricas. Así que intente esto en su lugar:

var firstArray = {}; 
firstArray.c1 = "sam"; 
firstArray.c2 = "kam"; 
var secArray = {}; 
secArray.c3 = "sam"; 
secArray.c4 = "kam"; 

for (var prop in secArray) { 
    if (secArray.hasOwnProperty(prop)) { 
     firstArray[prop] = secArray[prop]; 
    } 
} 
+0

¿Por qué la redundancia? Estás recorriendo las propiedades de la segunda matriz y luego llamando a "hasOwnProperty" en la segunda matriz con el valor del primer ciclo. ¿Querías probar "hasOwnProperty" en la primera matriz? – doomspork

Cuestiones relacionadas