src/object/sum.ts

Summary

Maintainability
A
45 mins
Test Coverage
import type { TextNumber } from '~/internal/types'
import isNil from '~/is/isNil'
import isNumeric from '~/is/isNumeric'

export default function sum(object: Record<PropertyKey, TextNumber | boolean | Function>): number {
  let result = 0
  for (const key in object) {
    let value = object[key]
    if (value instanceof Function) {
      value = value()
    }

    if (isNil(value) || value === false) {
      value = 0
    }
    if (!isNumeric(value)) {
      value = 1
    }

    result += <number>value
  }

  return result
}