Pregunta

Página 116 de la guía de desarrolladores dice "A diferencia de la etiqueta cfloop, CFScript para-en bucles no proporcionan soporte incorporado para recorrer más de consultas y listas."

Q: ¿Cómo hacer yo bucle sobre una lista utilizando la nueva sintaxis de la escritura en ColdFusion 9

<cfloop list="#qry.Columnlist#" index="FieldName">
   <cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
¿Fue útil?

Solución

También puede probar el listToArray y luego usar el para-en la construcción de matrices en CF9 como:

<cfscript>
aCol = listToArray (qry.ColumnList);

for( fieldName in aCol ){
    form[fieldName]  = qry[fieldName][1];
}

</cfscript>

Otros consejos

<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 mejor (tal vez un poco más rápido, por lazos muy fuertes) de la versión 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>

Me gustaría convertir la lista en una matriz en primer lugar. ListGetAt() no es eficiente para ser llamado n veces en un bucle. Sin embargo ArrayLen() debe 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top