query array coldfusion coldfusion-9 cfloop

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>