انضم إلى صفيفتين في Coldfusion
-
28-09-2019 - |
سؤال
هل هناك طريقة مدمجة للانضمام إلى صفيفتين في Coldfusion ، على غرار JavaScript array.concat()
?
المحلول
ليس حقا ، ولكن خمن ماذا ، فقط استخدم جافا! قون
<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
نصائح أخرى
CF10+، استخدام
arrayAppend(array1, array2, true);
https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-ab/arrayappend.html
إنها غبية نوعًا ما ، كيف يفتقد 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 أو Railo 4 ، يمكنك استخدام وظيفة Concat () مكتبة UndersCore.cfc للحصول على صفيف جديد يمثل تسلسلًا لمصفوفتين أخريين (دون تعديل المصفوفات الحالية). مثال cfscript:
newArray = _.concat([1], [2]);
نتيجة:
// newArray == [1, 2]
يعد استخدام هذه الطريقة للحصول على صفيف جديد أنظف قليلاً من إنشاء مجموعة جديدة واتصال ArrayAppend عليها مرتين.
(إخلاء المسئولية: كتبت Underscore.cfc)
في JavaScript Array.join (s) ينشئ سلسلة من جميع عناصر الصفيف مفصولة بواسطة المحدد. وظيفة مماثلة لهذا في coldfusion هي وظيفة arraytolist. بقدر ما يتم إلغاء صفيف لآخر ، لا أعتقد أن هناك وظيفة CF لذلك. يفحص http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html؟content=functions-pt0_03.html#3473387 لرؤية قائمة وظائف الصفيف في راجع أو جرب شيئًا كهذا:
<cfscript> for(index = 1; index LTE ArrayLen(array2); i = i + 1) { ArrayAppend(array1, array2[i]); } </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>