Зацикливаться на массив структур и выводить конкретное значение структуры? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть массив структур, где я должен получить доступ к конкретному полю.Вот пример моих данных:

array
1   
   struct
   address_city     Washington
   address_state    DC
array
2   
   struct
   address_city     New York
   address_state    NY
array
3   
   struct
   address_city     Miami
   address_state    FL

У меня есть этот код для циклического перебора массива, а затем внутренний цикл для перебора структур:

<cfloop from="1" to="#arrayLen(arrData)#" index="i">
    <cfset data = arrData[i]>
    <cfloop collection="#data#" item="key">
        <cfoutput>#key#:#data[key]#<br></cfoutput>
    </cfloop> 
</cfloop>

Приведенный выше код будет выдавать этот вывод:

address_city:Washington
address_state:DC
address_city:New York
address_state:NY
address_city:Miami
address_state:FL

Вместо этого мне нужно получить доступ только к значению address_state.Я пробовал что-то вроде этого:

<cfloop from="1" to="#arrayLen(arrData)#" index="i">
    <cfset data = arrData[i]>
    <cfloop collection="#data#" item="key">
        <cfoutput>#data[key]['address_state']#<br></cfoutput>
    </cfloop> 
</cfloop>

Затем я получил это сообщение об ошибке:

Message     You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members. 

Есть ли способ вывести только одно поле из каждой структуры в массиве?Нечто подобное можно реализовать в JavaScript при переборе объектов JS.Пример:

for (var key in data) {
    console.log(data[key]['address_state']);
}

Если кто-нибудь знает способ достижения этого в ColdFusion, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я рассмотрел вашу проблему и надеюсь, что вы получили ответ, основанный на стиле написания сценариев.Но, как вы сказали в комментариях выше, вам нужна функциональность на основе тега.Итак, здесь я разместил свою функциональность на основе тега.Я надеюсь, что это поможет вам.Спасибо.

<cfloop array ="#arrData#" index="data">
    Address_State: #data.address_state# <br>
</cfloop>
0 голосов
/ 04 декабря 2018

Как ни странно, есть способ сделать это почти так же, как в примере с JS.

for (key in data) {
    writeOutput( "Address State = " & key.address_state & "<br>");
}

https://trycf.com/gist/f0bd28bbf644912d320b10fdc5f526f4/acf?theme=monokai

Вы получили ошибку, потому что ссылались на data массив, когда вам не нужно.Вы уже проходили через key s в data по своей природе.В вашем примере сценария вам не нужно было делать двойной цикл через ваш массив.

...