writedump显示的不仅仅是结构上的循环

时间:2018-05-03 16:12:19

标签: coldfusion

我的客户希望在每个合适的列中列出每个项目及其所属类别的名称。

<cfscript>
   arr = ArrayNew(1);
   arr[1] = '';
   arr[2] = 'category B';
   stc["Item One"] = arr;
   arr[1] = 'category A';
   arr[2] = '';
   stc["Item Two"] = arr;
   arr[1] = 'category A';
   arr[2] = 'category B';
   stc["Item Three"] = arr;
   writedump(stc);
   for (element in stc) {
     WriteOutput(element & '<br>');
     // The next line produces: 
     // Object of type class java.lang.String cannot be used as an array
     for (i=1; i<=ArrayLen(element); i+=1) {
     }
   }
</cfscript>

问:如何访问每个元素中的数组?

2 个答案:

答案 0 :(得分:7)

在您的示例中,您使用for ... in循环来迭代结构的,而不是值。这可能有点令人困惑,因为与数组相同的语法将遍历元素

在您的代码中,您已将密钥字符串放入element,而不是数组。这就是产生错误Object of type class java.lang.String cannot be used as an array的原因。

正如RRK所回答的那样,要访问结构中的值,您需要使用语法struct[keyOfItem]

//Loop keys in the struct
for (key in stc) {
    writeOutput(key & '<br>');
    //Loop items in the array
    for(element in stc[key]){
        writeOutput(element & '<br>');
    }
}

答案 1 :(得分:3)

您可以使用[]表示访问内部数组。

stc[element]这将为您提供数组。

for (i=1; i<=ArrayLen(stc[element]); i+=1) {
    writedump(stc[element][i]);
}

DEMO