Объедините два массива в ColdFusion - PullRequest
34 голосов
/ 21 июня 2010

Существует ли встроенный способ объединения двух массивов в ColdFusion, аналогичный JavaScript array.concat()?

Ответы [ 8 ]

47 голосов
/ 21 июня 2010

Не совсем, но угадайте что, просто используйте Java!:)

<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll( bar )>

ссылка: API интерфейса коллекции Java .

источник: http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267

43 голосов
/ 04 июня 2012
8 голосов
/ 21 июня 2010

Если вы используете Railo , вы можете использовать ArrayMerge (Например, <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>).

7 голосов
/ 01 февраля 2011

Довольно глупо, как в Coldfusion не хватает многих основных функций, которые можно ожидать от языка сценариев. Вот один, который я должен был написать быстро.

<cffunction name="mergeArrays" returntype="array" >
    <cfargument name="array1" type="array" required="true" >
    <cfargument name="array2" type="array" required="true" >

    <cfset arrayResult = arrayNew(1) >
    <cfloop array="#array1#" index="elem">
        <cfset arrayAppend(arrayResult,elem) >
    </cfloop>

    <cfloop array="#array2#" index="elem">
        <cfset arrayAppend(arrayResult,elem) >
    </cfloop>

    <cfreturn arrayResult>
</cffunction>
1 голос
/ 12 августа 2012

В CF 10 или Railo 4 вы можете использовать функцию concat () библиотеки Underscore.cfc , чтобы получить новый массив, который является объединением двух других массивов (без изменения существующих массивов) , Пример cfscript:

newArray = _.concat([1], [2]);

Результат:

// newArray == [1, 2]

Использование этого метода для получения нового массива немного чище, чем создание нового массива и двойной вызов ArrayAppend для него.

(Отказ от ответственности: я написал Underscore.cfc)

0 голосов
/ 12 марта 2013

Вы можете легко объединить два списка следующим образом:

<cfset combolist = ListAppend(lista,listb, ",")>

Итак, сначала преобразуйте ваши два массива в списки, используя ArrayToList(). Объедините два списка с помощью ListAppend (), а затем преобразуйте ответ обратно в массив с ListToArray().

Я не знаю, насколько это эффективно, но код очень прост. Я хотел бы использовать arrayAppend (), но я в ColdFusion 8.

0 голосов
/ 07 декабря 2012

Я взял это у Бена Наделя и использовал его для шифрования и хэширования. Работал как шарм!

<cfscript>
    // Note: BinaryDecode/CharsetDecode return java arrays. 
    // Unlike CF arrays, java arrays are immutable, 
    // so the Java addAll(..) method to merge arrays won't work here. 
    // http://stackoverflow.com/a/10760835/104223

    // function to merge immutable arrays the long way
    function mergeArrays( array1, array2 ){
        var i = 0;
        var newArray = [];
        for (i = 1; i <= arrayLen(arguments.array1); i++) {
            arrayAppend(newArray, arguments.array1[i]);
        }
        for (i = 1; i <= arrayLen(arguments.array2); i++) {
            arrayAppend(newArray, arguments.array2[i]);
        }
        return newArray;
    }


    //convert the saltArray string and CustomerID string to UTF-8 byte arrays.
    saltByteArray = charsetDecode(salt, "utf-8");
    CustomerIdByteArray = charsetDecode(CustomerId, "utf-8");

    //create a new byte array consisting of the CustomerId bytes
    //appended with the salt bytes by merging the two binary arrays 
    //via custom function, mergeArrays
    mergedBytes = mergeArrays( CustomerIdByteArray, saltByteArray );
</cfscript>
0 голосов
/ 24 июня 2010

В javascript array.join (s) создает строку из всех элементов массива, разделенных разделителем s.Функцией, аналогичной этой в ColdFusion, является функция ArrayToList.Что касается добавления массива к другому, я не верю, что для этого есть функция CF.Проверьте http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387, чтобы увидеть список функций Array в CF.Или попробуйте что-то вроде этого:

<cfscript>
   for(index = 1; index LTE ArrayLen(array2); i = i + 1) {
      ArrayAppend(array1, array2[i]);
  }
</cfscript>
...