0

我有一个具有 ImageID 和 Custnum 结构的数组。我需要找到一个特定的 ImageID 并为其检索 Custnum。我正在使用没有 ArrayFind 命令的 ColdFusion 8。如果不遍历每个项目,我将如何做到这一点?谢谢。

4

2 回答 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 回答