2011-05-27 65 views
0

爲什麼arrayFindNoCase()返回false?它不應該返回2嗎?ArrayFind()在返回索引值時返回false!

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

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

我只希望搜索整個元素2,即'{name =「bar」,value = 6}'。 – Leigh 2011-05-27 19:26:16

+0

@Leigh,我不知道是這樣。如果我只是在尋找部分匹配,我有什麼選擇嗎? – Mohamad 2011-05-27 19:31:05

+0

@Leigh,這就是我最終做的。事情是,該功能已經在一個循環內。所以我不得不做一個有點複雜的嵌套循環。我明白了。謝謝。 – Mohamad 2011-05-27 20:43:57

回答

2

不是真的,因爲{值= 6}!= {名稱= 「酒吧」,值= 6}

+0

如果絕對有必要只使用部分匹配,我的選擇是什麼? – Mohamad 2011-05-27 19:27:53

+0

做它的老式的方式?即循環並檢查每個元素。 – Leigh 2011-05-27 19:31:28

+0

嘗試ArrayContains http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WS2EF4F7C2-F41D-42fe-940D-B7C0212FF3D9.html – 2011-05-28 14:07:26

1

你不能做部分匹配...如果你已經搜查如下,你已經得到了2

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

它返回false,因爲你正在尋找:

{ value = 6 } 

這不是數組的元素。該陣列有:

{ name = "bar", value = 6 } 
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>