我有一个具有 ImageID 和 Custnum 结构的数组。我需要找到一个特定的 ImageID 并为其检索 Custnum。我正在使用没有 ArrayFind 命令的 ColdFusion 8。如果不遍历每个项目,我将如何做到这一点?谢谢。
问问题
953 次
2 回答
0
您的问题可能会在这里得到回答“ ColdFusion 8 中是否有类似于 ColdFusion 9 中的 ArrayFind 的功能? ”但除了循环之外,我没有看到任何其他方式。
您始终可以创建和使用 UDF,但它必须使用循环。
为什么你不想使用循环呢?数组中有那么多元素吗?请记住cfbreak
在找到您的元素后使用以停止遍历数组的其余部分。
于 2013-09-09T06:13:08.247 回答
0
arrayFind()
鉴于您的情况,我认为无论如何都不会对您有太大帮助,因为要使用 找到一些东西arrayFind()
,您需要确切地知道您在寻找什么。虽然你知道你的ImageID
,但你不知道Custnum
与之相关的(因此你的潜在问题)。
CF 中没有任何本地程序可以帮助您,但CFLib上有一个 UDF -可以解决问题structFindKeyWithValue()
。
它是为 CF9 编写的,但很容易向后移植到 CF8。修改后的 CF8 友好版本 - 在下面的示例中:
<cfscript>
a = [
{ImageID=1, Custnum=1},
{ImageID=2, Custnum=2},
{ImageID=3, Custnum=3},
{ImageID=4, Custnum=4}
];
testStruct = {a=a};
result = structFindKeyWithValue(testStruct, "ImageID", 2, "ONE");
function structFindKeyWithValue(struct, key, value, scope){
var keyResult = false;
var valueResult = [];
var i = 0;
if (!isValid("regex", arguments.scope, "(?i)one|all")){
throw(type="InvalidArgumentException", message="Search scope #arguments.scope# must be ""one"" or ""all"".");
}
keyResult = structFindKey(struct, key, "all");
for (i=1; i <= arrayLen(keyResult); i++){
if (keyResult[i].value == value){
arrayAppend(valueResult, keyResult[i]);
if (scope == "one"){
break;
}
}
}
return valueResult;
}
</cfscript>
<cfdump var="#result#">
请注意,因为它是一个结构函数,所以您需要先将数据包装在结构中。除此之外,它相当直接。
于 2013-09-09T07:45:49.723 回答