遍历结构数组并输出特定的结构值?

Loop over array of structures and output specific struct value?

我有一组结构,我应该在其中访问特定字段。这是我的数据示例:

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. 

有没有办法只输出数组中每个结构的一个字段?遍历 JS 对象时,JavaScript 中可以进行类似的操作。示例:

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

如果有人知道在 ColdFusion 中实现此目的的方法,请告诉我。

有趣的是,有一种方法可以做到几乎与 JS 示例完全一样。

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

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

您收到错误是因为您在不需要时引用了 data 数组。根据循环的性质,您已经在 data 中循环遍历 key。在您的脚本示例中,您不需要对数组进行双循环。

我已经解决了你的问题,希望你能根据基于脚本的编码风格得到答案。但是正如您在上面的评论中所说,您需要基于标签的功能。所以这里我有 post 我的基于标签的功能。我希望它能帮助你。谢谢

<cfloop array ="#arrData#" index="data">
    Address_State: #data.address_state# <br>
</cfloop>