1

我有一些在 Railo 中工作的基于标签的语法。

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

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

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

for ( i in myArray) {}

但是,“i”给了我项目……我怎样才能访问索引值?

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

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

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

我试过谷歌搜索所有这些,但从来没有得到任何像样的结果。有没有办法重写我的 for in 循环以允许我也访问索引?

谢谢,米奇。

4

3 回答 3

1

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

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

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

尽管就个人而言,我宁愿使用其他功能方法之一,例如mapor reduce,具体取决于您要执行的操作。

注意:我写了 Underscore.cfc

于 2013-05-15T17:53:17.310 回答
1

恐怕在 ColdFusion中这是不可能的,除了您当前正在使用的解决方法,或者只是使用索引 for 循环。

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

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

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

于 2013-05-14T15:19:58.030 回答
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”

于 2019-04-17T08:50:33.277 回答