writedump показывает больше, чем цикл по структуре - PullRequest
0 голосов
/ 03 мая 2018

Мой клиент хочет получить список каждого элемента с названием категорий, к которым он относится, в каждом соответствующем столбце.

<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 голосов
/ 03 мая 2018

В вашем примере вы используете цикл 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>');
    }
}
0 голосов
/ 03 мая 2018

Вы можете получить доступ к массивам внутри, используя представление [].

stc[element] Это даст вам массив.

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

DEMO

...