2012-06-11 8 views
7

Ho un valore di compilazione di una stringa valori separati da virgola Io uso split per ottenere ogni valore e dopo voglio mostrare ogni valore su una nuova riga ma ciò che realmente accade è che Ricevo ogni valore su una nuova riga tranne gli ultimi due che sono mostrati insieme su una stessa riga. Giusto per chiarire:Javascript come mostrare ogni elemento della matrice su una nuova riga

valore1

, valore2

, valore3

, valore4, Value5

Ecco la funzione che sto usando:

_checkDates: function(dates) { 
     if (dates != null) 
     { 
      var zzz = dates.split(','); 
      var xxx = zzz.length; 
      console.log(xxx); 
      for (var i=0; i<=xxx; i++) 
       { 
        zzz[i] = zzz[i] + '<br />'; 
        return zzz; 
       } 
     } 
     return dates; 
    } 

Giusto per essere chiari, questo è scritto in ExtJS 4, sono quasi sicuro che in questo caso il problema è puro JavaScript e non è correlato con ExtJS 4 ma in ogni caso, forse ho sbagliato.

Quindi, qualsiasi idea, perché succede e come potrei fare in modo che anche l'ultimo elemento venga inserito in una nuova riga?

Grazie

Leron

+0

perché in te r per loop hanno un segno di uguale. dovrebbe essere meno allora per esempio. se zzz ha lunghezza 5 (xxx = 5) si desidera accedere agli elementi da 0 a 4, valore 1 indice = 0, valore2 indice = 1, valore3 indice = 2, valore4 indice = 3 e valore5 indice = 4. attualmente stai facendo da 0 a 5. perché il ciclo termina dopo aver raggiunto 5 non 4. quindi stai provando ad accedere a zzz [5] che non ha alcun valore. – GreenGiant

+0

Lo so, ma ho provato con '<' e '<=' anche con '==' non ha funzionato. Non conosco il motivo per cui il tag '
' non è assegnato, infatti è per questo che ho posto la domanda.La risposta di Stefan qui sotto risolve il mio problema attuale, ma sarei grato se qualcuno mi dicesse dov'è l'errore nel mio script e come modificarlo per funzionare correttamente. – Leron

risposta

7

Il ciclo for è sospetto. Innanzitutto, non elabori tutti gli elementi (manca l'ultimo, come sottolineato da @sarfraz). Sencondly si restituisce il risultato (zzz) nel corpo per-loop:

for (var i=0; i<=xxx; i++) 
{ 
    zzz[i] = zzz[i] + '<br />'; 
    return zzz; // for-loop will stop here! resulting in ["value1<br />", "Value2", etc...] 
} 

In javscript è possibile semplice "unire" la matrice:

return dates.split(',').join("<br />") 

Dal momento che si sta semplicemente sostituendo le stringhe si potrebbe usare il metodo replace:

return dates.replace(",", "<br />"); 
+2

'return dates.split (','). Join ("
")' - esattamente quello di cui ho bisogno. Grazie. – Leron

11

Ho modificato la funzione po cleaner.since già accennato Stefan tuo errore.

function splitDate(dates) { 
     if (dates != null) 
     { 
      var dates = dates.split(','); 
      var xxx = dates.length; 
      console.log(xxx); 
      for (var i=0; i<xxx; i++) 
       { 
        dates[i] = dates[i];      
       } 
     } 
     console.log(dates.join('\r\n')); 
     return dates.join('\r\n');   
    } 

la funzione di cui sopra si può fare in una sola riga:

se si tratta di una matrice è possibile dividere in nuova linea nel seguente modo:

var arr = ['apple','banana','mango']; 
console.log(arr.join('\r\n')); 

se si tratta di un stringa:

var str = "apple,banana,mango"; 
console.log(str.split(',').join("\r\n")); 
+0

si può fare 'console.log (arr.join ('
'));' –

Problemi correlati