ColdFusion - cfscript中的集合循环

时间:2013-05-14 15:09:31

标签: coldfusion railo cfml

我有一些基于标签的语法适用于Railo。

<cfloop collection="#myArray#" item="j" index="i"></cfloop>

以上允许我访问索引'i'和项目本身'j'。

我想在cfscript中做同样的事情,所以我使用了:

for ( i in myArray) {}

但是,“我”给了 ...如何访问索引值?

作为解决方法,我不得不手动计算索引,如下所示:

j = 1;
for ( i in myArray) {
j++;
}

但这感觉很脏。 cfscript的for语法是否允许cfloop集合的真正替代?

我已经尝试了谷歌搜索所有这些,但从来没有得到任何体面的结果。有没有办法重写我的for循环以允许我访问索引?

谢谢, MIKEY。

3 个答案:

答案 0 :(得分:1)

在ColdFusion 中不可能,我担心,除了你正在使用的解决方法,或者只是使用索引for循环。

然而在Railo中,有这种(相当糟糕的标签/脚本混合语法):

<cfscript>
    loop array=[5,4,3,2,1] index="i" item="v"  {
        writeOutput("[#i#][#v#]<br>");
    }   
</cfscript>

所以基本上它是没有尖括号的<cfloop>

答案 1 :(得分:1)

在CF 10和Railo 4中,您可以使用Underscore.cfc library

_ = new Underscore();// instantiate the library

_.each(myArray, function(item, index) {
   // code here
});

虽然就个人而言,我宁愿使用其他功能方法之一,例如mapreduce,具体取决于您要做的事情。

注意:我写了Underscore.cfc

答案 2 :(得分:1)

您可以使用:

<cfscript>
    for (key in struct) {
        writeOutput("#key# = #struct[key]# <br>");
    }
</cfscript>

<cfoutput>
    <cfloop collection="#params#" item="key" >
        #key# = #params[key]#         
    </cfloop>
</cfoutput>

请记住在Applicacion.cfc中设置“ this.serialization.preservecaseforstructkey = true”