array - coldfusion 11 cfloop
Looping sobre listas en cf9 (3)
La página 116 de la guía del desarrollador dice: "A diferencia de la etiqueta cfloop, los bucles forwards de CFScript no proporcionan soporte integrado para el bucle sobre consultas y listas".
P: ¿Cómo realizo un ciclo sobre una lista usando la nueva sintaxis del script en ColdFusion 9?
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
Primero convertiría la lista en una matriz. ListGetAt()
no es eficiente para llamarse n veces en un bucle. ArrayLen()
sin embargo, debería ser bastante rápido.
<cfscript>
arr = ListToArray(qry.Columnlist);
for (i = 1; i <= ArrayLen(arr); i++)
{
fieldName = arr[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>
También puede probar listToArray y luego usar la construcción for-in para Arrays en CF9 como:
<cfscript>
aCol = listToArray (qry.ColumnList);
for( fieldName in aCol ){
form[fieldName] = qry[fieldName][1];
}
</cfscript>
<cfscript>
var i = 0;
var l = ListLen(qry.Columnlist);
var FieldName = "";
for (i = 1; i lte l; i = i + 1) // you also can use i++ instead
{
FieldName = ListGetAt(qry.Columnlist, i);
form[FieldName] = qry[FieldName][1];
}
</cfscript>
EDITAR Nicer (tal vez un poco más rápido, para loops realmente pesados) versión de lo anterior:
<cfscript>
var i = 0;
var Fields = ListToArray(qry.Columnlist);
var FieldName = "";
var l = arrayLen(Fields);
for (i = 1; i lte l; i = i + 1) // you also can use i++ instead
{
FieldName = Fields[i];
form[FieldName] = qry[FieldName][1];
}
</cfscript>