¿Qué hace el siguiente javascript?Javascript - ¿Qué hace esta línea?
var groups = countrylist.split(',');
for(var i = -1, group; group = groupsCounty[++i];){
...
}
¿Qué hace el siguiente javascript?Javascript - ¿Qué hace esta línea?
var groups = countrylist.split(',');
for(var i = -1, group; group = groupsCounty[++i];){
...
}
With i starting at -1
increase i by 1
get the ith element from the groupsCounty array
if there is no such element: stop
otherwise: assign it to group and carry on (with whatever "…" is)
Es una versión optimizada de:
for (var i = 0; i < groupsCounty.length; i++;){
var group = groupsCounty[i];
…
}
¿Es seguro hacer un bucle de esta manera? (¿Cómo funciona en todos los navegadores?) – digiguru
¿El for-loop de la pregunta realmente supera al for-loop en esta respuesta? En la CPU o en la memoria utilizada? – jpabluz
@David, ¿es eso correcto? group = groupsCounty [++ i] es un poco confuso para mí –
Está iterando sobre los elementos de grupos usando la presencia de un valor en grupo como condición de protección. es decir, usar JavaScript Truthiness para controlar el número de veces que el ciclo itera, porque guard será falso cuando no hay ningún valor que se le pueda asignar.
El for
loop recorre el conjunto groups
hasta que groupsCounty[++i]
devuelve un valor falso.
Con el uso de los siguientes términos:
for (<initial-expression>; <condition>; <final-expression>)
El inicial expresiónvar i = -1, group
declara las variables i
y group
. Para cada iteración, la condición de buclegroup = groupsCounty[++i]
asigna el siguiente valor de matriz a group
. Si esa expresión es falsa (por ejemplo, groupsCounty[++i]
devuelve undefined cuando está fuera de límites), el ciclo se detiene. Y la expresión final está vacía ya que i
ya se ha incrementado dentro de la expresión contition.
Es equivalente a
for (var group in groupsCounty) {
...
}
Con el valor añadido de tener acceso al índice (i
).
'group' sería __be__ el valor del índice, entonces tendría que eliminar la referencia de la matriz usando' anotherVariable = groupdCountry [group] 'para adquirir el valor. – AnthonyWJones
No es equivalente. Un bucle 'for ... in' enumera todas las propiedades del objeto, incluidas las propiedades heredadas del prototipo del objeto, en un orden indefinido. Por lo tanto, tiene un orden de bucle diferente y posiblemente se iterarán más propiedades. Además, en su ejemplo, 'group' sería el nombre de la propiedad en lugar del valor de la propiedad como lo es en la pregunta original. –
Su hacer esto: -
var groups = countrylist.split(',');
for(var i = 0; i < groups.length; i++)
{
var group = groups[i]
...
}
La única diferencia real es que lo anterior es mucho más común y más fácilmente reconocible. No habría publicado el código anterior preguntando "¿Qué está haciendo esto?".
El código que ha publicado es un ejemplo de desarrollo inteligente pero no necesariamente una buena práctica de codificación.
¿Se supone que 'groups' y' groupsCounty' son la misma variable? –
Me encantaría saber: estoy tratando de averiguar qué está roto en la página: p – digiguru
Eso está roto con seguridad. Cambie 'var groups = countrylist.split (',');' para 'var groupsCounty = countrylist.split (',');'. Probablemente alguien estaba refactorizando y renombrando esa variable, pero no terminó su trabajo. –