Is there a built-in way to join two arrays in ColdFusion, similar to JavaScript's array.concat()
?
Not really, but guess what, just use Java! :)
<cfset foo = [1,2,3]>
<cfset bar = [4,5,6]>
<cfset foo.addAll( bar )>
reference: Java's Collection Interface API.
source: http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267
removeAll
, retainAll
, etcetera is that the java methods are not as lenient as your typical CF function. They are usually data type sensitive. So "2"
(string) and val(2)
(number) are considered different values/elements. Unless you are absolutely certain the data types in both arrays match, you are better of using other methods IMO. –
Nonalignment CF10+, use
arrayAppend(array1, array2, true);
If you're using Railo, you can use ArrayMerge (E.g. <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>
).
Its kinda dumb how coldfusion misses many basic functions that one would expect from a scripting language. Here's one I had to write quickly.
<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>
In CF 10 or Railo 4, you can use the concat() function of the Underscore.cfc library to get a new array that is a concatenation of two other arrays (without modifying the existing arrays). Example cfscript:
newArray = _.concat([1], [2]);
Result:
// newArray == [1, 2]
Using this method to get a new array is a bit cleaner than creating a new array and calling ArrayAppend on it twice.
(Disclaimer: I wrote Underscore.cfc)
In javascript array.join(s) creates a string out of all of the elements of the array separated by the delimiter s. A similar function to this in ColdFusion is the ArrayToList function. As far as appending an array to another I don't believe there is a CF function for that. Check http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387 to see the list of Array functions in CF. Or try something like this:
<cfscript> for(index = 1; index LTE ArrayLen(array2); i = i + 1) { ArrayAppend(array1, array2[i]); } </cfscript>
I took this from Ben Nadel and used it to perform encryption and hashing. Worked like a charm!
<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.
// https://mcmap.net/q/427125/-sha-512-hashing-a-byte-array-in-coldfusion
// 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>
You can easily concatenate two lists like this:
<cfset combolist = ListAppend(lista,listb, ",")>
So, first convert your two arrays to lists using ArrayToList()
. Combine the two lists with the ListAppend() and then convert the answer back to an array with ListToArray()
.
I don't know how efficient this is, but the code is very simple. I'd love to use the arrayAppend() but I'm in ColdFusion 8.
,
. ie The single value arr[1] ="Doe, John"
would become arr[1] = Doe, arr[2] = John
. –
Nonalignment ~!
means CF sees the values as delimited by ~
OR !
. (Things may have changed in CF10). Using a single character like ascii 30, and preserving empty list elements, should get it much closer. –
Nonalignment Yes, ColdFusion(10+) has an inbuilt function to append two arrays.
Script version : array1.append(array2, true);
Tag version: arrayAppend(array1, array2, true);
© 2022 - 2024 — McMap. All rights reserved.