36

在 ColdFusion 中是否有一种内置方法可以连接两个数组,类似于 JavaScript 的array.concat()

4

9 回答 9

49

不是真的,但你猜怎么着,就用Java!:)

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

参考:Java 的集合接口 API

来源:http ://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/merging-two-arrays-267

于 2010-06-21T02:13:17.350 回答
49

CF10+,使用

arrayAppend(array1, array2, true);

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-ab/arrayappend.html

于 2012-06-04T18:11:51.703 回答
8

如果您使用的是Railo,则可以使用ArrayMerge (Eg <cfset NewArray=ArrayMerge(FirstArray,SecondArray)>)。

于 2010-06-21T02:55:29.047 回答
7

有点愚蠢,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>
于 2011-02-01T00:54:30.253 回答
1

在 CF 10 或 Railo 4 中,您可以使用Underscore.cfc 库的 concat() 函数来获取一个由其他两个数组串联而成的新数组(无需修改现有数组)。cfscript 示例:

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

结果:

// newArray == [1, 2]

使用这种方法来获取一个新数组比创建一个新数组并在其上调用 ArrayAppend 两次要干净一些。

(免责声明:我写了 Underscore.cfc)

于 2012-08-12T19:15:18.433 回答
0

您可以像这样轻松地连接两个列表:

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

因此,首先使用 . 将您的两个数组转换为列表ArrayToList()。将两个列表与 ListAppend() 组合,然后将答案转换回带有ListToArray().

我不知道这有多高效,但代码非常简单。我很想使用 arrayAppend() 但我在 ColdFusion 8 中。

于 2013-03-12T04:07:49.857 回答
0

我从 Ben Nadel 那里拿到了这个,并用它来执行加密和散列。像魅力一样工作!

<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>
于 2012-12-06T21:56:40.633 回答
0

在 javascript array.join(s) 中,从由分隔符 s 分隔的数组的所有元素中创建一个字符串。ColdFusion 中与此类似的函数是 ArrayToList 函数。至于将数组附加到另​​一个数组,我不相信有一个 CF 函数。检查http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions-pt0_03.html#3473387以查看 CF 中的数组函数列表。或尝试这样的事情:

<cf脚本>
   for(index = 1; index LTE ArrayLen(array2); i = i + 1) {
      ArrayAppend(array1, array2[i]);
  }
</cfscript>
于 2010-06-23T21:44:05.513 回答
0

是的,ColdFusion(10+) 有一个内置函数来追加两个数组。

脚本版本:array1.append(array2, true);

标签版本:arrayAppend(array1, array2, true);

于 2020-08-04T21:10:05.510 回答