2012-01-18 10 views
10

Quiero convertir una matriz en cadena en NodeJS.Convertir matriz a cadena en NodeJS

var aa = new Array(); 
aa['a'] = 'aaa'; 
aa['b'] = 'bbb'; 

console.log(aa.toString()); 

Pero no funciona.
¿Alguien sabe cómo convertir?

Respuesta

18

Estás utilizando un Array como una "matriz asociativa", que no existe en JavaScript. Use un Object ({}) en su lugar.

Si va a continuar con una matriz, tenga en cuenta que toString() unirá todas las numeradas propiedades juntas separadas por una coma. (lo mismo que .join(",")).

Propiedades como a y b no se van a plantear el uso de este método, ya que no están en los numéricos índices. (es decir, el "cuerpo" de la matriz)

En JavaScript, Array hereda de Object, por lo que puede agregar y eliminar propiedades como cualquier otro objeto. Por lo tanto, para una matriz, las propiedades numeradas (son técnicamente cadenas bajo el capó) son lo que cuenta en métodos como .toString(), .join(), etc. Sus otras propiedades siguen estando allí y son muy accesibles. :)

Lea Mozilla's documentation para obtener más información acerca de matrices.

var aa = []; 

// these are now properties of the object, but not part of the "array body" 
aa.a = "A"; 
aa.b = "B"; 

// these are part of the array's body/contents 
aa[0] = "foo"; 
aa[1] = "bar"; 

aa.toString(); // most browsers will say "foo,bar" -- the same as .join(",") 
3

toString es una función, no una propiedad. Usted querrá esto:

console.log(aa.toString()); 

Como alternativa, el uso de unión para especificar el separador (toString() === join (''))

console.log(aa.join(' and ')); 
11

toString es un método, por lo que debe agregue el paréntesis () para realizar la llamada a la función.

> a = [1,2,3] 
[ 1, 2, 3 ] 
> a.toString() 
'1,2,3' 

Además, si desea utilizar cadenas como claves, entonces usted debe considerar el uso de un Object en lugar de Array, y utilizar JSON.stringify para devolver una cadena.

> var aa = {} 
> aa['a'] = 'aaa' 
> JSON.stringify(aa) 
'{"a":"aaa","b":"bbb"}' 
+0

Escriba el error para el paréntesis. Esta corregido ¿Puedes explicar por qué usar Object para la cadena como claves? ¿Por qué Array no puede no ser usado? ¿Y por qué Object.toString() no funciona? – Magic

+1

@Magic ver esta gran publicación: http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/ – qiao

1

En nodo, sólo se puede decir

console.log(aa) 

y va a formatearlo como debería.

Si es necesario utilizar la cadena resultante se debe utilizar

JSON.stringify(aa) 
+0

JSON.stringify (aa) no puede imprimir el contenido. Porque mi matriz es un índice de cadena. Solo funciona para la matriz de índices int. – Magic

+1

@Magic - No existe una matriz de índice de cadena en js.La única razón por la que aa ['a'] funciona es porque el tipo Array hereda de Object, por lo que emulará una matriz asociativa, mientras que de hecho muchas de las funciones de la matriz ya no funcionarán debido a ella, y existen otras trampas. Si necesita una matriz asociativa, debe usar un objeto '{a: 0, b: 4}' en lugar del tipo de matriz, que solo funciona en índices numéricos '[0,4]' –