2012-01-18 13 views
10

Voglio convertire un array in stringa in NodeJS.Converti array in stringa in NodeJS

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

console.log(aa.toString()); 

Ma non funziona.
Qualcuno sa come convertire?

risposta

18

Stai utilizzando un Array come un "array associativo", che non esiste in JavaScript. Utilizzare invece Object ({}).

Se si intende continuare con un array, rendersi conto che toString() si uniranno a tutte le proprietà numerate separate da una virgola. (lo stesso di .join(",")).

Case simili a a e b non saliremo utilizzando questo metodo perché non sono nelle numerici indici. (cioè il "corpo" dell'array)

In JavaScript, Array eredita da Object, quindi è possibile aggiungere e cancellare proprietà su di esso come qualsiasi altro oggetto. Quindi per un array, le proprietà numerate (sono tecnicamente solo stringhe sotto il cofano) sono ciò che conta in metodi come .toString(), .join(), ecc. Le altre proprietà sono ancora lì e molto accessibili. :)

Leggi Mozilla's documentation per ulteriori informazioni sugli array.

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 è una funzione, non una proprietà. Vorrete questo:

console.log(aa.toString()); 

In alternativa, l'uso si uniscono per specificare il separatore (toString() === join (''))

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

toString è un metodo, così si dovrebbe aggiungi parentesi () per effettuare la chiamata alla funzione.

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

Inoltre, se si desidera utilizzare le stringhe come chiavi, allora si dovrebbe considerare l'utilizzo di un Object invece di Array, e utilizzare JSON.stringify per restituire una stringa.

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

Tipo errore per la parentesi. È corretto Puoi spiegare perché usare Object per la stringa come chiavi. Perché la matrice non può essere utilizzata? E perché Object.toString() non funziona? – Magic

+1

@Magic vedere questo bel post: http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/ – qiao

1

Nel nodo, si può solo dire

console.log(aa) 

e sarà formattarlo come dovrebbe.

Se è necessario utilizzare la stringa risultante si dovrebbe usare

JSON.stringify(aa) 
+0

JSON.stringify (aa) non può stampare il contenuto. Perché il mio array è un indice di stringa. Funziona solo per l'array di indice int. – Magic

+1

@Magic - Non esiste un array di indici stringa in js.L'unica ragione per cui funziona ['a'] è perché il tipo Array eredita da Object, quindi emulerà un array associativo, mentre in realtà molte delle funzioni dell'array non funzioneranno più a causa di esso, e ci sono altre insidie. Se hai bisogno dell'array associativo, dovresti usare un oggetto '{a: 0, b: 4}' invece del tipo di array, che funziona davvero solo sugli indici numerici '[0,4]' –