Цикл по массиву, вложенному в структуру - PullRequest
0 голосов
/ 25 октября 2018

Это некоторые данные, возвращаемые API.Мне нужно перебрать массивы, которые содержатся во вложенной структуре.Например, на изображении ниже saveMajorIds:

enter image description here

isArray(apiprofile.result.savedMajorIds)

возвращает Да, так что я уверен, что он смотрит на нужную вещь.Тем не менее, когда я пытаюсь перебрать его, чтобы получить значения, он ломается.Код:

for (i=1, i < arrayLen(apiprofile.result.savedMajorIds),i=i+1) {
        writeOutput(apiprofile.result.savedMajorIds[i]);
    }

Журналу ошибок не нравится часть arrayLen (), но до сих пор я не смог заставить это работать.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вот несколько вариантов, в зависимости от вашей версии ColdFusion.

if (isArray(apiprofile.result.savedMajorIDs)) {
    // For/In Loop on Array - Possibly CF9, Definitely CF10+ (Verify version) 
    // Note: x will leak unless var'ed inside function.
    for ( x IN apiprofile.result.savedMajorIDs ) {
        writeoutput( x & "<br>" ) ;
    }

    // ArrayEach - CF10+ > Note: y will not leak.
    ArrayEach(apiprofile.result.savedMajorIDs, function(y){writeoutput(y & "<br>");}) ;

    // Member Function .each() - CF11+  > Note: z will not leak.
    apiprofile.result.savedMajorIDs.each( function(z){writeoutput(z & "<br>");}) ;
}

https://trycf.com/gist/f6f3e64635e4b72da15521a3d49d485f/acf11?theme=monokai

0 голосов
/ 25 октября 2018

Для всех, кто сталкивается с этим:

(i=1, i < arrayLen(apiprofile.result.savedMajorIds),i=i+1)

должно быть

(i=1; i < arrayLen(apiprofile.result.savedMajorIds); i=i+1)

или

(i=1; i < arrayLen(apiprofile.result.savedMajorIds); i++)
...