2012-06-18 13 views
0

給定下面的數組,如何將其轉換爲簡單的值列表?如何(有選擇地)將數組元素轉換爲值列表

<cfdump var="#arguments.ServiceTextArray#"> 

數組元素:

1 3567_no 
    2 3584_yes 
    3 3642_yes 
    4 3643_yes 
    5 3644_no 
    6 3645_no 
    7 3646_no 

具體來說,我如何提取值的 「是」 後綴,產生這樣的名單?

3584,3642,3643 

在此先感謝。

回答

2
var list = ""; 

for (item in array) 
    if (ListLast(item, "_")) 
     list = listAppend(list, val(item)); 
+1

我認爲他們只想要「是」值。 – Leigh

+0

@Leigh'yes'是CF中的一個布爾值,所以'listRest(item,「_」)'返回的值將會被執行。 – Henry

+1

@Henry哈哈,聰明,但我認爲如果我在維護過程中遇到這樣的代碼,我會感到有點沮喪。 –

2

這會幫助嗎?總會有比這更好的解決方案。

<cfset myList = ""> 
<cfloop from="1" to="#Arraylen(myArray)#" index="index"> 

    <Cfif right(myArray[index],3) EQ "yes"> 
     <cfset myList = listAppend(myList, listFirst(myArray[index], '_'))> 
    </Cfif> 
</cfloop> 

<cfoutput>#myList#</cfoutput> 
+1

不要忘記用逗號分隔列表元素。此外,'listAppend'比字符串連接更簡單,也就是'&' – Leigh

+0

@Leigh根據您的建議更新了代碼 – DG3

+0

我會試試這個..謝謝 – TGR

2

這部分的擴展,亨利的答案,但應該是你以後到底是什麼:

<cfscript> 
    tmpArray = ['567_no','584_yes','3642_yes','3643_yes','3644_no','3645_no','3646_no']; 
    list = ""; 
    for (item in tmpArray) 
     if (listLast(item, "_") == "yes") 
      list = listAppend(list, listFirst(item, "_")); 

writeDump(list); 

1

使用Underscore.cfc library(CF 10只):

filteredArray = _.filter(arguments.ServiceTextArray, function(val) { 
    return (val contains 'yes'); 
}); 

resultArray = _.map(filteredArray, function(val) { 
    return left(val, 4); 
}); 

list = arrayToList(resultArray); 

(我創建了這個庫,BTW)

+0

不錯的一個。我沒有意識到你可以用CF10來做到這一點。順便說一下,你的圖書館?如果是這樣,您可能希望將標準的關聯免責聲明添加到響應[按照SO規則](http://stackoverflow.com/faq#promotion)。 – Leigh

+0

感謝您的信息,我已添加免責聲明。希望你找到圖書館是有用的! – Russ