数组中结构的总和

时间:2011-12-05 08:16:23

标签: coldfusion

我正在整理购物车,我将购物车数据保存在一个数组中,数组内部是一个包含各个产品信息的结构。我需要得到结构中的totalprice列的总和,请看下面我的转储,我试过

<cfset carTotal = ArraySum(session.mycart[ "totalPrice" ])>但这会产生错误,“价值总价格无法转换为数字”?这是因为我在结构中使用arrayum吗?

任何帮助将不胜感激,谢谢。

Shopping Cart Array

4 个答案:

答案 0 :(得分:5)

如果mycart是一个查询对象,那么它就是一个简单的ArraySum(mycart.totalPrice)

由于它是一个结构数组,你必须自己循环,这仍然很容易:

<cfset sum = 0>
<cfloop array="#session.mycart#" index="item">
    <cfset sum += item.totalPrice>
</cfloop>

<cfdump var="#sum#">

当您需要完全精确时,不要忘记使用PrecisionEvaluate()

答案 1 :(得分:4)

因为它是一个数组,你必须循环自己,跟踪总和。

<cfset cartTotal = 0 />

<cfloop array=#session.mycart# index="i">
    <cfset cartTotal += i.totalPrice /> 
</cfloop>

<cfdump var="#cartTotal#" />

答案 2 :(得分:2)

在Coldfusion 10或Railo 4中,您可以使用reduce functionUnderscore.cfc

_ = new Underscore();

cartTotal = _.reduce(session.mycart, function(total, item){
   return total + item.TotalPrice;
}, 0);

reduce是一个常见的高阶函数,它将一组值“减少”为单个值。在这种情况下,我们将集合中所有项目的价格“降低”为一笔。

使用像reduce这样易于理解的函数,而不是自定义解决方案,会产生更易读的代码。

注意:我写了Underscore.cfc

答案 3 :(得分:1)

除了拉斯的回答外,在Coldfusion 11或Lucee中,您也可以简单地进行arrayReduce()。不再需要下划线了。

cartTotal = arrayReduce(session.mycart, function(total, item){
   return total + item.TotalPrice;
}, 0);