Skip to content

calc_sum

calc_sum 用于对数据数组进行聚合计算,是 v2.2.15 新增的方法。

基本签名

typescript
function calc_sum<Expr, Fmt, Err>(
  expr: Expr,
  dataArray: Array<object>
): string | number | Err

参数

参数类型描述
exprstring计算表达式,可包含格式化
dataArrayArray数据对象数组

功能说明

calc_sum 会对数组中的每个对象执行表达式计算,然后将所有结果求和。

使用示例

基本用法

javascript
import { calc_sum } from 'a-calc'

const items = [
  { a: 1, b: 2 },
  { a: 3, b: 4 },
  { a: 5, b: 6 }
]

// 计算每项 a + b 的总和
calc_sum('a + b', items)  // '21' (3 + 7 + 11)

// 带格式化
calc_sum('a + b | =2', items)  // '21.00'

订单金额汇总

javascript
import { calc_sum } from 'a-calc'

const orderItems = [
  { price: 99.9, quantity: 2 },
  { price: 49.9, quantity: 1 },
  { price: 29.9, quantity: 3 }
]

// 计算订单总金额
calc_sum('price * quantity | =2', orderItems)
// '339.40' (199.8 + 49.9 + 89.7)

带千分位的汇总

javascript
import { calc_sum } from 'a-calc'

const sales = [
  { amount: 12345.67 },
  { amount: 23456.78 },
  { amount: 34567.89 }
]

calc_sum('amount | =2,', sales)
// '70,370.34'

与手动计算对比

javascript
import { calc, calc_sum } from 'a-calc'

const items = [
  { price: 10, qty: 2 },
  { price: 20, qty: 3 },
  { price: 15, qty: 1 }
]

// 方式一:calc_sum(推荐)
const total1 = calc_sum('price * qty', items)

// 方式二:手动 reduce
const total2 = items.reduce((sum, item) => {
  return calc(`${sum} + price * qty`, item)
}, '0')

// 两者结果相同,但 calc_sum 更简洁

实际应用

购物车总价

javascript
import { calc_sum } from 'a-calc'

const cart = [
  { name: '商品A', price: 99.9, qty: 2, discount: 0.9 },
  { name: '商品B', price: 49.9, qty: 1, discount: 1 },
  { name: '商品C', price: 29.9, qty: 3, discount: 0.8 }
]

// 计算折后总价
const total = calc_sum('price * qty * discount | =2', cart)
// '251.64'

统计报表

javascript
import { calc_sum } from 'a-calc'

const monthlyData = [
  { month: '1月', revenue: 100000, cost: 60000 },
  { month: '2月', revenue: 120000, cost: 70000 },
  { month: '3月', revenue: 150000, cost: 80000 }
]

// 计算总收入
const totalRevenue = calc_sum('revenue | ,', monthlyData)
// '370,000'

// 计算总利润
const totalProfit = calc_sum('revenue - cost | ,', monthlyData)
// '160,000'

工资汇总

javascript
import { calc_sum } from 'a-calc'

const employees = [
  { name: '张三', base: 8000, bonus: 2000, deduction: 500 },
  { name: '李四', base: 10000, bonus: 3000, deduction: 800 },
  { name: '王五', base: 12000, bonus: 4000, deduction: 1000 }
]

// 计算实发工资总额
const totalSalary = calc_sum('base + bonus - deduction | =2,', employees)
// '36,700.00'

注意事项

  1. 数组为空时返回 '0'
  2. 数组中某项计算失败会影响最终结果
  3. 格式化应用于最终求和结果,而非每个中间值
Ctrl+D 选择词, Ctrl+/ 注释

基于 MIT 许可发布