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 @   herry菌  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
历史上的今天:
2021-09-08 纯前端 读取本地txt文件并展示
点击右上角即可分享
微信分享提示