js常用轮子整理01

返回2个日期之间的所有日期数组

function getAllDates(start, end) {
  let dateList = [];
  const startTime = getDate(start);
  const endTime = getDate(end);
  while ((endTime.getTime() - startTime.getTime()) >= 0) {
    const year = startTime.getFullYear();
    const month = startTime.getMonth() + 1 < 10 ? '0' + (startTime.getMonth() + 1) : startTime.getMonth() + 1;
    const day = startTime.getDate().toString().length == 1 ? "0" + startTime.getDate() : startTime.getDate();
    dateList.push(year + "-" + month + "-" + day);
    startTime.setDate(startTime.getDate() + 1);
  }
  return dateList;
}

//字符串日期转标准时间格式
function getDate(datestr) {
  const temp = datestr.split("-");
  const date = new Date(temp[0], temp[1] - 1, temp[2]);
  return date;
}

//调用
getAllDates('2022-08-21', '2022-09-08');

 

结果

判断给定的日期是否是周末

//判断日期是否为周末
function isWeekend(date) {
  var _date = new Date(date);
  var num = _date.getDay(_date), res = false;
  if ([0, 6].includes(num)) {
    res = true;
  }
  return res;
};

//调用
isWeekend('2022-09-08');//false

同步延迟

const timeout = async (t) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve();
    }, t)
  })
}

//调用 async函数中
await timeout(1000) //延迟1秒

A数组的元素是否包含B数组的元素

function includes(a, b) {
  return b.every(val => a.includes(val));
}

//调用
includes([1,2,3], [2,3]);//true

按key取value值,和按value取key值(相同的value取前一个key)

//按key取value
function key_value(obj, str) {
  return obj[str] || str;
}
//按value取key
function value_key(obj, str, compare = (a, b) => a === b) {
  return Object.keys(obj).find(k => compare(obj[k], str)) || str
}

//调用
const obj = {
  a: 1,
  b: 2,
  c: 3,
}
key_value(obj, a);//1
value_key(obj, 3);//c

防抖,多次触发时的指定时间内只执行1次

// 防抖
const debounce = (func, time) => {
  let timeout = null
  return function() {
    if (timeout) clearTimeout(timeout)
    timeout = setTimeout(() => {
      func.apply(this, arguments)
    }, time)
  }
}

//调用 知道时间内触发了多次,不会执行函数。指定时间后才会执行1次
document.body.onmousemove = debounce(() => {
  console.log(1)
}, 3000)

二维数组转一维数组

// 多维数组转一维数组
const flatten = (arr) => {
  return arr.reduce((prev, next) => {
    return prev.concat(Array.isArray(next) ? flatten(next) : next)
  }, [])
}

//调用
arr = [[2, [3, 4]], 4]
flatten(arr);//[2, 3, 4, 4]

file类型转base64字符串

// 文件转base64
function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });
}

异步加载js文件

//异步加载js文件
function createScript(id, src) {
  const script = document.createElement('script')
  script.id = id
  script.src = src
  document.body.appendChild(script)
}

//调用 加载jquery
createScript('jquery', 'https://libs.baidu.com/jquery/1.10.2/jquery.min.js')

数字转每3位数1个逗号,用于展示大数字,如金额

//数字转每三位一个逗号
function getNum(num) {
  return Number(num).toLocaleString()
}

//调用
getNum(32323432);//32,323,432

对象深拷贝

//对象深拷贝
function deepClone(source) {
  if (!source && typeof source !== 'object') {
    throw new Error('error arguments', 'deepClone')
  }
  const targetObj = source.constructor === Array ? [] : {}
  Object.keys(source).forEach(keys => {
    if (source[keys] && typeof source[keys] === 'object') {
      targetObj[keys] = deepClone(source[keys])
    } else {
      targetObj[keys] = source[keys]
    }
  })
  return targetObj
}

const arr1 = { a: { a: 1 }, b: 2, c() { } }
const arr2 = deepClone(arr1)
arr2.a.a = 2
arr2.c = () => { console.log('c') }
console.log(arr1.a.a, arr2.a.a);//1   2
console.log(arr1.c, arr2.c);// (){}   ()=>{console.log('c')}

 json数据转formdata类型数据

//json转formdata类型
const formdataify = (params) => {
  const formData = new FormData();
  Object.keys(params).forEach(key => {
    if (typeof params[key] == "string") {
      formData.append(key, params[key]);
    } else {
      formData.append(key, JSON.stringify(params[key]));
    }
  });
  return formData;
};

//调用
const fd = formdataify({ a: 1 })
console.log(fd.get('a')) //1

 

 

 

 

posted @ 2022-09-08 17:33  herry菌  阅读(48)  评论(0编辑  收藏  举报