js获取类型 简化数据对象


/*
# **********************************************************
# * Author          : 夜路沏茶
# * Technical       : 
# * Filename        : utils/index.js
# * Version         : 0.1
# * Description     : 简化数据
# * -------------------------------------------------------
# * Last modified   : 2021-8-20 16:14:36
# * Last Update Log : 初版
# * *******************************************************
*/


/**
 * 简化请求
 * @param vm 原有请求
 * @param rule 简化规则
 * @param deep 深度
 * e.g. console.log(conciseRequest({ a: 'a', b: null, c: 'c', d: '', e: undefined, f: NaN, g: '  ', h: { a: 1, b: '', c: null }, i: [0, 1, 2], l: [] }, ['NaN', 'null']))
 */
export function conciseRequest(vm, rule, deep) {
  if (!rule) { rule = ['', 'undefined', 'null', 'NaN'] }
  if (!deep) { deep = false }
  const result = function(vm, rules, deep) {
    Object.keys(vm).forEach(item => {
      if (rules.indexOf(getType(vm[item])) > -1) delete vm[item]
      // TODO: 2021-8-20 对象深度简化
    })
    return vm
  }
  return result(vm, rule, deep)
}

/**
 * 获取数据类型
 * @param vm 数据对象
 * @returns {string|"undefined"|"object"|"boolean"|"number"|"string"|"function"|"symbol"|"bigint"}
 */
export function getType(vm) {
  // 为空、未定义、NULL 直接返回 不做类型判断
  if (vm === '') return ''
  if (vm === undefined) return 'undefined'
  if (vm === null) return 'null'
  // 判断数字
  if (typeof vm === 'number' && isNaN(vm)) return 'NaN'
  if (typeof vm === 'number') return 'Number'
  // 判断字符串
  if (vm.constructor.name === 'String') {
    // 字符串为空串是,显示为空 (方便排除空值)
    if (vm.trim() === '') return ''
    return 'String'
  }
  // 判断数组
  if (Array.prototype.isPrototypeOf(vm)) {
    // 数组为空时,显示为空 (方便排除空值)
    if (vm.length === 0) return ''
    return 'Array'
  }
  // 判断函数
  if (vm instanceof Function) return 'Function'
  // 判断日期、错误对象等一系列对象
  if (vm instanceof Object) return 'Object'
  // 不存在则直接 typeof
  return typeof vm
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值