我有一个嵌入在另一个结构中的数组内的结构,如下所示:Arguments.cart.data.Items[x].Labels.Pkg.Title
(x
是一个索引,因为我正在循环Items
)。< / p>
Items
是一个数组,而Labels
,Pkg
和Title
是嵌套结构。
Title
并不总是存在。所以我想检查一下。但是,使用structFindKey
会返回错误
您试图取消引用类型为coldfusion.runtime.Array的标量变量作为具有成员的结构
我可以看看Arguments.cart.data
;但是,如果数组中有多行,则某些行可能包含Title
,而其他行则不包含Title
。所以我想在每个Items
内检查arrayFind
。
我也试过{{1}},但后来我收到了错误
Struct不能用作数组
我在这里不知所措。
答案 0 :(得分:4)
这将完成工作
<cfscript>
for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) {
tempI = arguments.cart.data.Items[i];
if (IsDefined('tempI.Labels.Pkg.Title')) {
// It exists
} else {
// It doesn't
}
}
</cfscript>
IsDefined不能很好地与数组一起使用,但是通过将数组的每个元素分配给临时值,您就可以在IsDefined中引用它。
或者,如果您更喜欢StructKeyExists
,则可以执行以下操作<cfscript>
for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) {
tempI = arguments.cart.data.Items[i];
if (
StructKeyExists(tempI,'Labels')
&& StructKeyExists(tempI.Labels,'Pkg')
&& StructKeyExists(tempI.Labels.Pkg,'Title')
) {
// It exists
} else {
// It doesn't
}
}
</cfscript>
答案 1 :(得分:1)
我过去也遇到过这种情况。只需暂时将数组粘贴到结构中......这会使structFindKey()
和structFindValue()
正常工作。