ArrayFind()在返回索引值时返回false!

时间:2011-05-27 19:18:55

标签: arrays coldfusion struct coldfusion-9

为什么arrayFindNoCase()返回false?它不应该返回2?

local.data =
[
   {
      name = "foo",
      value = 5
   },
   {
      name = "bar",
      value = 6
   }
];

local.key = arrayFindNoCase(data, { value = 6 }); 

4 个答案:

答案 0 :(得分:2)

不是真的,因为{value = 6}!= {name =“bar”,value = 6}

答案 1 :(得分:1)

你无法进行部分匹配...如果你搜索过如下,那么你就得到了2。

local.key = arrayFindNoCase(local.data, {name = "bar",value = 6 }

答案 2 :(得分:1)

它正在返回false,因为您正在搜索:

{ value = 6 }

不是数组的元素。该数组有:

{ name = "bar", value = 6 }

答案 3 :(得分:1)

答案已在此处 - 正如您所发现的,您无法通过标准CF函数搜索阵列中的结构。

如果你想要这个特定的功能,这里有一个简单的例子。

<cffunction name="arrayFindStructKey" returntype="numeric">
    <cfargument name="arr" type="array" required="true"> 
    <cfargument name="key" type="string" required="true">
    <cfargument name="val" type="string" required="true">

    <cfset var i = 0>

    <cfloop from="1" to="#arrayLen(arguments.arr)#" index="i">
         <cfif isStruct(arguments.arr[i]) and structKeyExists(arguments.arr[i], arguments.key)>
              <cfif arguments.arr[i][arguments.key] eq arguments.val>
                  <cfreturn i>
              </cfif>
         </cfif>
    <\cfloop>

    <cfreturn 0> <!--- not found --->

</cffunction>