常用业务JS函数方法

/**
 * ascSortData 升序
 * @param {Array}  arr  数据
 * return Array
 */
export const ascSortData = arr => arr.sort((a, b) => a.value - b.value)
/**
 * descSortData 降序
 * @param {Array}  arr  数据
 * return Array
 */
export const descSortData = arr => isArray(arr) ? arr.sort((a, b) => b.value - a.value) : arr

/**
 * firstUpperCase 首字母大写
 * @param  {String}  str  字符串
 * return String
 */
export const firstUpperCase = str => str.toLowerCase().replace(/^\S/g, s => s.toUpperCase())

/**
 * lowercaseCase 字符串小写
 * @param  {String}  str  字符串
 * return String
 */
export const lowercaseCase = str => str.toLocaleLowerCase()

/**
 * findArrayIndex 查找数组下标 - value index
 * @param  {Array}   arr    数据
 * @param  {String}  key    类型
 * @param  {String}  value  结果
 * return Number 下标
 */
export function findArrayIndex(arr, key, value) {
  return isArray(arr) ? arr.findIndex(item => item[key] === value) : -1
}

/**
 * intersect 取数组交集
 * @param  {Array}  original   原始数组
 * @param  {Array}  arr        对比数组
 * return Array-[]
 */
export function intersect(original, arr) {
  if (!isArray(original) || !isArray(original)) {
    return original
  }
  const packageData = new Set(arr)
  return original.filter(el => packageData.has(el))
}

/**
 * minus 取数组差集
 * @param  {Array}  original   原始数组
 * @param  {Array}  arr        对比数组
 * return Array-[]
 */
export function minus(original, arr) {
  if (!isArray(original) || !isArray(original)) {
    return original
  }
  const packageData = new Set(arr)
  return original.filter(el => !packageData.has(el))
}

/**
 * complement 取数组补集
 * @param  {Array}  original   原始数组
 * @param  {Array}  arr        对比数组
 * return Array-[]
 */
export function complement(original, arr) {
  if (!isArray(original) || !isArray(original)) {
    return original
  }
  const packageOriginal = minus(original, arr)
  const packageData = minus(arr, original)
  return [...packageOriginal, ...packageData]
}
/**
 * unionSet 取数组并集
 * @param  {Array}  original   原始数组
 * @param  {Array}  arr        对比数组
 * return Array-[]
 */
export function unionSet(original, arr) {
  if (!isArray(original) || !isArray(original)) {
    return original
  }
  return Array.from(new Set([...original, ...arr]))
}

/**
 * dataEmptyFilter 格式化数据
 * @param   {String}  str  str
 * @returns {String}
 */
export function dataEmptyFilter(str) {
  if (!str && str !== 0) {
    return '-'
  }
  return str
}

/**
 * arrayConversion  数组转化
 * @param {Array}  value   源数据
 * @param {Array}  srcValue   目的数据
 * @returns
 */
export const arrayConversion = (value, result) => {
  if (isArray(value)) {
    value = []
    return result
  }
}

/**
 * arrayConversionToObject  数组转对象
 * @param  {Array}  options 源数据
 * @returns []
 */
export const arrayConversionToObject = options =>
  options.map(el => el.key).reduce((acc, cur) => ({ ...acc, [cur]: 0 }), {})

/**
 * objectConversionToInitData  对象转数组
 * @param  {Array}  options 源数据
 * @returns []
 */
export const objectConversionToInitData = options =>
  Object.keys(options).reduce((acc, cur) => ({ ...acc, [cur]: 0 }), {})

/**
 * arrayToHeavy  数组去重
 * @param {Array} data
*/
export const arrayToHeavy = (data) => Array.from(new Set(data))

/**
 * flattenArray  拉平多组数组
 * @param {Array} data
 */
export const flattenArray = (data) => data.reduce((flat, toFlat) => flat.concat(Array.isArray(toFlat) ? flattenArray(toFlat) : toFlat), [])
/**
 * updateArrayData 更新数组 解决vue2.0数组更新问题
 * @param {Array} data
 * @param {Array} result
 */
export const updateArrayData = (data, result) => {
  remove(result)
  data.map((el, index) => result.splice(index, 1, el))
  return result
}

/**
 * fillZero 个位补零
 * @param  {Number}  num  数字
 */
export const fillZero = (num) => `${num}`.padStart(2, '0')
/**
 * sum 数组算和
 * @param {Array} arr  数组
 * return num
 */
export const sum = (arr) => (arr.reduce((acc, cur) => (acc += cur.value), 0))

/*
  千位分隔
*/
export const numberWithCommas = (x) => x.toString().replace(/(\d)(?=(\d{3})+$)/g, '$1,')
/**
 * isObject 判断是否为对象
 * @param {Object} arg
 * @returns
 */
export const isObject = function(arg) {
  return Object.prototype.toString.call(arg) === '[object Object]'
}

/**
 * isEmptyObject 判断是否为空对象
 * @param   {objcet}  data
 * @returns
 */
export const isEmptyObject = (data) => {
  return !isEmpty(data) && !Object.keys(data).length
}

你可能感兴趣的:(javascript,开发语言,ecmascript)