分享几个js方法

//返回数组中的最大值。
const arrayMax = arr => Math.max(...arr);

//返回数组中的最小值
const arrayMin = arr => Math.min(...arr);

//将数组块划分为指定大小的较小数组。
const chunk = (arr, size) => Array.from({length: Math.ceil(arr.length / size)}, (v, i) => arr.slice(i * size, i * size + size));

// 从数组中移除 falsey(false、null、 0、 ""、undefined和NaN) 值。
const compact = (arr) => arr.filter(Boolean);

//计算数组中特定值(value)的出现次数
const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);

// 深拼合数组。递归拼合作为数组的每个元素。
const deepFlatten = arr => [].concat(...arr.map(v => Array.isArray(v) ? deepFlatten(v) : v));

// 返回数组的所有不同值。去重
const distinctValuesOfArray = arr => [...new Set(arr)];

// 返回数组中的每个第 n 个元素。
const everyNth = (arr, nth) => arr.filter((e, i) => i % nth === 0);

// 正确返回字符串长度
function length(str) {
  return [...str].length;
}
// 获取路由参数
function getQueryString(name, search) {
  search = search || window.location.search;
  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
  var r = search.substr(1).match(reg);
  if (r !== null) {
    return decodeURIComponent(r[2]);
  }
  return '';
}

// 数组中对象取相同id的一条数据
function toHeavyFn(data, id) {
  if(Array.isArray(data)) {
    let i = 0, len = data.length;
    let arr = [];
    let obj = {};
    for(i; i < len; i ++) {
      if(!obj[data[i][id]]) {
        arr.unshift(data[i]);
        obj[data[i][id]] = `${i}`;
      }
    }
    return arr;
  }else {
    return '';
  }
}

// 	将数组中对象相同id的合并为对象中一项
function toMergeFn(data, id) {
  if(Array.isArray(data)) {
    let i = 0, len = data.length;
    let targetObj = {};
    let obj = {};
    for(i; i < len; i ++) {
      if(!obj[data[i][id]]) {
        targetObj['option'+i] = [...data[i]];
        obj[data[i][id]] = `${i}`;
      }else {
        targetObj['option'+i] = [data[i], ...targetObj['option'+i]];
      }
    }
    return targetObj;
  }
  return 'NOT ARRAY';
}

// 判断是否是windowsPhone
const deviceIsWindowsPhone = navigator.userAgent.indexOf('Windows Phone') >= 0;

// 判断是否是Android
const deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;

// 判断是否是ios
const deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;

// 延时函数的执行
function debounce(func, delay) {
  let timer;
  return function (...args) {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
}

// 格式化银行卡号
function formattingBankCode(str) {
  let text = str;
  let rtn = '';
  let len = Math.floor(str.length / 4);
  for (let i = 0; i < len; i++) {
    rtn += text.substring(i * 4, i * 4 + 4) + ' ';
  }
  return rtn;
}

// 简单判定,未做月份及日期的判定
let dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;

//复杂判定
let dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值