我正在整理购物车,我将购物车数据保存在一个数组中,数组内部是一个包含各个产品信息的结构。我需要得到结构中的totalprice列的总和,请看下面我的转储,我试过
<cfset carTotal = ArraySum(session.mycart[ "totalPrice" ])>
但这会产生错误,“价值总价格无法转换为数字”?这是因为我在结构中使用arrayum吗?
任何帮助将不胜感激,谢谢。
答案 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 function的Underscore.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);