我需要使用Coldfusion通过数字(2)多个数组。
例如:myArray = [1,2,3,4]
将每个元素乘以数字2
我知道有一种map方法可以这样做,但不确定它在Coldfusion中是如何工作的。 有这个功能吗?或者需要为此编写自定义函数/方法?
答案 0 :(得分:4)
使用CFScript
<cfscript>
for(var item in myArray)
{
myArray[item] *= 2;
}
</cfscript>
或者如果你想保留原文
<cfscript>
newArray = myArray;
for(var item in newArray)
{
newArray[item] *= 2;
}
</cfscript>
答案 1 :(得分:4)
如果您使用的是ColdFusion 10,则可以使用arrayEach()
:
<cfscript>
original = [1,2,3,4];
multiplied = [];
arrayEach(original, function(e){
arrayAppend(multiplied, e * 2);
});
writeDump(var=[original, multiplied]);
</cfscript>
答案 2 :(得分:2)
虽然地图功能在CF 10或Railo 4中不存在,但您可以使用map function中的Underscore.cfc library:
_ = new Underscore(); // init library
result = _.map([1, 2, 3, 4], function(val) {
return val * 2;
});
注意:我写了Underscore.cfc
答案 3 :(得分:0)
你必须编写自己的功能。听起来你可能已经掌握了如何做到这一点 - 但是,如果它有用,这就是我将如何实现它:
<cffunction name="ArrayMultiply" >
<cfargument name="SourceArray" type="array" >
<cfargument name="Factor" type="numeric" >
<cfset NewArray = ArrayNew(1) >
<cfloop index="i" from="1" to="#ArrayLen(ARGUMENTS.SourceArray)#" >
<cfset NewArray[i] = ARGUMENTS.SourceArray[i] * ARGUMENTS.Factor >
</cfloop>
<cfreturn NewArray >
</cffunction>
<cfset MyArray = ArrayNew(1) >
<cfset MyArray[1] = 1 >
<cfset MyArray[2] = 2 >
<cfset MyArray[3] = 3 >
<cfset MyArray[4] = 4 >
<cfset MultipliedArray = ArrayMultiply( MyArray, 2 ) >
<cfoutput>
<p>[ #MultipliedArray[1]#, #MultipliedArray[2]#, #MultipliedArray[3]#, #MultipliedArray[4]# ]</p>
</cfoutput>