2012-06-11 7 views
7

Tengo una secuencia de comandos de valores separados por comas de forma que utilizo split para obtener cada valor y luego quiero mostrar cada valor en una nueva línea, pero lo que realmente sucede es que Obtengo cada valor en una nueva línea, excepto en los dos últimos que se muestran juntos en la misma línea. Sólo para que quede claro:Javascript cómo mostrar cada elemento de la matriz en una nueva línea

valor1

; valor2

, Value3

, valor4, valor5

Aquí es la función que estoy 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; 
    } 

Para que quede claro esto está escrito en ExtJS 4, estoy casi seguro de que en este caso el problema es el JavaScript puro y no está relacionado con ExtJS 4, pero de todos modos, tal vez estoy equivocado.

¿Alguna idea de por qué sucede y cómo podría hacer que ese último elemento también llegue a una nueva línea?

Gracias

Leron

+0

por qué en ti r for loop tiene un signo igual. debería ser menos entonces. p.ej. si zzz tiene una longitud 5 (xxx = 5) desea acceder a los elementos 0 a 4, valor 1 índice = 0, índice2 índice = 1, índice3 valor = 2, índice4 valor4 e índice valor5 = 4. actualmente está haciendo de 0 a 5. porque el ciclo sale después de que alcanza 5 no 4. por lo tanto, está tratando de acceder a zzz [5] que no tiene ningún valor. – GreenGiant

+0

Lo sé, pero probé con '<' y '<=' incluso con '==' no funcionó. No sé la razón por la cual la etiqueta '
' no está asignada, de hecho es por eso que publico la pregunta.La respuesta de Stefan a continuación resuelve mi problema actual, pero le agradecería a alguien que me diga dónde está el error en mi script y cómo modificarlo para que funcione correctamente. – Leron

Respuesta

7

El para-loop es sospechoso. En primer lugar, no procesa todos los elementos (falta el último, como señaló @sarfraz). Sencondly va a devolver el resultado (zzz) en el cuerpo de bucle:

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...] 
} 

En javscript se puede simple "unirse" a la matriz:

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

Puesto que usted está simplemente reemplazando las cadenas se puede utilizar replace el método:

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

'return dates.split (','). Join ("
")' - exactamente lo que necesito. Gracias. – Leron

11

he modificado su función cleaner.since poco ya se ha mencionado Stefan su error.

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 función anterior puede hacerlo en una sola línea:

si se trata de una matriz se puede dividir en una nueva línea en modo siguiente:

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

si es una cadena:

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

puedes hacer 'console.log (arr.join ('
'));' –

Cuestiones relacionadas