处理后端返回数据

在开发过程中经常遇到后端返回的数据不规范的问题, 返回的数据进行进一步处理调用其他方法的时候经常出现报错, 原因多种多样, 在这里自己封装了一些常用的对后端返回数据进行

/**
 * @name returnDataType
 * @param {*} data // 数据源为任意数据类型
 * @returns type 数据类型 number类型不再包含NaN; 当数据为NaN时返回type为NaN
 */
function returnDataType (data) {
  let str = Object.prototype.toString.call(data),
    type = '';
  if (str && str.length && str.length > 8) {
    type = str.substring(8, str.length - 1).toLowerCase()
  }
  if (type === 'number' && isNaN(data)) {
    type = 'NaN'
  }
  return type
}
/**
 * @name returnNumber
 * @param {*} data // 数据源为任意数据类型
 * @returns result 数字; 当data大于最大安全整数的数值时, 返回BigInt数据类型数字
 */
function returnNumber (data) {
  let result = 0;
  if (returnDataType(data) === 'number') {
    if (data > Number.MAX_SAFE_INTEGER) {
      result = BigInt(data)
    } else {
      result = data
    }
  } else if (returnDataType(data) === 'string') {
    if (data === '' || isNaN(+ data)) {
      result = 0
    } else {
      if (data > Number.MAX_SAFE_INTEGER) {
        result = BigInt(data)
      } else {
        result = + data
      }
    }
  }
  return result
}
/**
 * @name returnString
 * @param {*} data // 数据源为任意数据类型
 * @returns str 字符串; 数字为0时返回空字符串, 数据为数组时采用原生toString方法进行转换;
 */
function returnString (data) {
  let str = ''
  if (returnDataType(data) === 'number') {
    if (data === 0) {
      str = ''
    } else {
      str = data + ''
    }
  } else if (returnDataType(data) === 'string') {
    str = data
  } else if (returnDataType(data) === 'array') {
    str = data.toString()
  }
  return str
}
/**
 * @name returnArray
 * @param {*} data // 数据源为任意数据类型
 * @returns ary 数组; data为数组类型的json字符串,返回json转化过的数组,否则为空数组; 其余类型是数组的返回数组, 否则返回空数组;
 */
function returnArray (data) {
  let ary = []
  if (returnDataType(data) === 'array') {
    ary = data
  } else if (returnDataType(data) === 'string') {
    try {
      let arr = JSON.parse(data)
      if (arr && Array.isArray(arr)) {
        ary = arr
      } else {
        ary = []
      }
    } catch (err) {
      ary = []
    }
  }
  return ary
}
/**
 * @name returnObject
 * @param {*} data // 数据源为任意数据类型
 * @returns obj 标准普通对象; data为标准普通对象类型的json字符串,返回json转化过的对象,否则为空对象; 
 * 其余类型是标准普通对象的的返回对象, 否则返回空对象;
 */
function returnObject (data) {
  let obj = {}
  if (returnDataType(data) === 'object') {
    obj = data
  } else if (returnDataType(data) === 'string') {
    try {
      let objJson = JSON.parse(data)
      if (returnDataType(objJson) === 'object') {
        obj = objJson
      }
    } catch (error) {
      obj = {}
    }
  }
  return obj
}
/**  
 * returnDataType 返回任意数据的数据类型, 注意:NaN 返回 'NaN';
 * returnNumber  returnString  returnArray returnObject 主要针对后端返回的数据进行处理;
*/
export default {
  returnDataType,
  returnNumber,
  returnString,
  returnArray,
  returnObject,
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值