Присоединяйтесь к двум массивам в ColdFusion
-
28-09-2019 - |
Вопрос
Есть ли встроенный способ присоединиться к двум массивам в ColdFusion, аналогично JavaScript array.concat()
?
Решение
Не на самом деле, но угадайте, что, просто используйте Java! :)
<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll( bar )>
Справка: Интерфейс коллекции Java.
источник: http://www.aliaspoooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267.
Другие советы
CF10 +, используйте
arrayAppend(array1, array2, true);
Если вы используете Железнодорожный, ты можешь использовать Arraymerge. (Например <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>
).
Это глупо, как 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>
В CF 10 или RILO 4 вы можете использовать функцию CONCAT () LOODERSCORE.CFC Библиотека Чтобы получить новый массив, который является конкатенацией двух других массивов (без изменения существующих массивов). Пример CFScript:
newArray = _.concat([1], [2]);
Результат:
// newArray == [1, 2]
Используя этот метод, чтобы получить новый массив, немного очищен, чем создание нового массива и вызов ArrayAppend на нем дважды.
(Отказ от ответственности: я писал underscore.cfc)
В JavaScript Array.join (ы) создает строку из всех элементов массива, разделенного делимитрами. Аналогичная функция для этого в ColdFusion - это функция аррайтолиста. Что касается добавления массива к другому, я не верю, что для этого есть функция CF. Проверять http://livedocs.Adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387. Чтобы увидеть список функций массива в ср. Или попробуйте что-то вроде этого:
u003Ccfscript>для (индекс = 1; индекс lte arraylen (array2); i = i + 1) {arrayappend (array1, array2 [i]); }u003C/cfscript>
Вы можете легко объединить два списка таких:
<cfset combolist = ListAppend(lista,listb, ",")>
Итак, сначала преобразуйте свои два массива в список, используя ArrayToList()
. Отказ Объедините два списка с помощью ListAppend (), а затем преобразуйте ответ обратно на массив с ListToArray()
.
Я не знаю, насколько это эффективно, но код очень прост. Я хотел бы использовать ArrayAppend (), но я в Coldfusion 8.
Я взял это из Бена Надель и использовал его для выполнения шифрования и хеширования. Работал как шарм!
<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>