ColdFusion:インループのcfscriptからインデックスを取得することは可能ですか?

そのため、for inループを使用して構造体の配列を繰り返し処理しています。

for(item in array) {
    processStruct(item)
}

Pretty straightforward, What I'm trying to do is get the current index in the for in loop and pass it along as well to the function: processStruct(item, index). I know I can do this with a regular for loop and it's also possible with the tag version


    #i#

1
ru de

4 答え

The tag variant offers item and index starting with ColdFusion 2016 (or Railo/Lucee).



    #idx#:#it#

<!--- returns 1:a 2:b 3:c --->

2016年より前のすべてのColdFusionバージョンではそうではありません。そのため、自分で行う必要があります。




    #idx#:#it#
    

<!--- returns 1:a 2:b 3:c --->

スクリプトの亜種はそれをサポートしておらず、おそらくサポートしていません。 JavaのIteratorインタフェースはそれを提供していませんどちらでも。

2
追加された
私は開始記事に記載されている for(x in a)スクリプトバリアントを参照していました。あなたはcfscript版のcfloopタグを見せたところです。
追加された 著者 Alex,
cfloopのスクリプトバリアントは、Luceeのインデックスをサポートしています。 ;
追加された 著者 Brad Wood,
ああ、あなたはそのときあなたの答えを編集したいと思うかもしれません。どの「スクリプトバリアント」を参照しているのか明確ではありませんでした。
追加された 著者 Brad Wood,

いいえ、for ...のインデックスにループがありません。独自のインデックスを設定するだけです。

var idx = 1;
for( item in struct ){
    processStruct( item, idx );
    idx++;
}
2
追加された
idxが0から始まるか、ループ内の2行の順序が正しくありません。
追加された 著者 Dan Bracuk,
idx ++; 行を削除して、 idx = 1 の場合は processStruct(item、idx ++); を使用することもできます。 processStruct(item) 、++ idx); if idx = 0
追加された 著者 isapir,
右?私はそれが深夜に起こることであると思います。頭のためのTHX。
追加された 著者 Robert Munn,

CF11以降、メンバ関数を使用できます。そうすれば、要素とインデックスの両方にアクセスできます。

myArray = ["a", "b", "c"];
// By arrayEach() member function CF11+
myArray.each(function(element, index) {
    writeOuput(element & " : " & index);
});
1
追加された

これを試してみてください(iはあなたの配列インデックスです)

for (i=1; i lte ArrayLen(yourArray); i++){
     processStruct(yourArray[i],i);
}
0
追加された
質問の最後の文は、彼がすでにこのアプローチの使い方を知っていると述べました。それゆえ、下落。
追加された 著者 Dan Bracuk,