Looping sobre listas em CF9
-
19-09-2019 - |
Pergunta
página 116 do guia do desenvolvedor diz "Ao contrário da tag CFLOOP, cfscript para-in loops de não fornecer suporte embutido para looping sobre consultas e listas."
Q: Como fazer loop de I sobre uma lista usando a nova sintaxe de script no ColdFusion 9
<cfloop list="#qry.Columnlist#" index="FieldName">
<cfset form[FieldName] = qry[FieldName][1]>
</cfloop>
Solução
Você também pode tentar o listToArray e use o para-in construto para Arrays em CF9 como:
<cfscript>
aCol = listToArray (qry.ColumnList);
for( fieldName in aCol ){
form[fieldName] = qry[fieldName][1];
}
</cfscript>
Outras dicas
<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>
EDIT mais agradável (talvez um pouco mais rápido, mesmo, para loops realmente pesados) versão do acima:
<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>
Eu iria transformar a lista em uma matriz em primeiro lugar. ListGetAt()
não é eficiente para ser chamado n vezes em um ciclo. ArrayLen()
no entanto deve 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow