Js items commonly used method for encapsulating retention ---

1. Enter a value, returns its data type

type = para => {
  return Object.prototype.toString.call(para).slice(8,-1)  
}

2. Bubble Sort

Ascending bubbleAsSort ()

bubbleAsSort = arr => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) { let temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } return arr; } 

Descending bubbleDeSort ()

bubbleDeSort = arr => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] < arr[j + 1]) { let temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } return arr; } 

3. Select Sort

Ascending selectAsSort ()

selectAsSort = arr => {
  let minIndex, temp;
  for (let i = 0; i < arr.length - 1; i++) {
    minIndex = i;
    for (let j = i + 1; j < arr.length; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; } 

Descending selectDeSort ()

selectDeSort = arr => {
  let minIndex, temp;
  for (let i = 0; i < arr.length - 1; i++) {
    minIndex = i;
    for (let j = i + 1; j < arr.length; j++) { if (arr[j] > arr[minIndex]) { minIndex = j; } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; } 

4. insertion sort

Ascending insertAsSort ()

insertAsSort = arr => {
  let current, preIndex;
  for (let i = 1; i < arr.length; i++) {
    current = arr[i];
    preIndex = i - 1;
    while (preIndex >= 0 && arr[preIndex] > current) {
      arr[preIndex + 1] = arr[preIndex];
      preIndex--;
    }
    arr[preIndex + 1] = current;
  }
  return arr; } 

Descending insertDeSort ()

insertDeSort = arr => {
  let current, preIndex;
  for (let i = 1; i < arr.length; i++) {
    current = arr[i];
    preIndex = i - 1;
    while (preIndex >= 0 && arr[preIndex] < current) {
      arr[preIndex + 1] = arr[preIndex];
      preIndex--;
    }
    arr[preIndex + 1] = current;
  }
  return arr; } 

5. factorial

factorial = num => {
  let count = 1;
  for (let i = 1; i <= num; i++) {
    count *= i;
  }
  return count;
}

That multiplies two numbers between 6.

multBetride = (x, y) => {
  let count;
  if (x < y) {
    count = x;
    for (let i = x + 1; i <= y; i++) {
      count *= i;
    }
    return count; } else { count = y; for (let i = y + 1; i <= x; i++) { count *= i; } return count; } } 

7. accumulation

() Which can put the N argument

function cumsum() {
    let sum = 0;
    for (let i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } 

8. timer (calculating code block (function) execution time)

No reference computeTime (f)

computeTime = code => {
  let startTime = new Date().getTime();
  code();
  let endTime = new Date().getTime();
  let time = endTime - startTime;
  return time;
}

There reference computeTime (f)
using the method: computeTime (f, parameter 1, parameter 2 ......)

computeTime = f => {
  let startTime = new Date().getTime();
  let p = [];
  for (let i = 1; i < arguments.length; i++) {
    p.push(arguments[i])
  }
  f.apply(null, p)
  let endTime = new Date().getTime(); let Time = endTime - startTime; return Time; } 

9. array deduplication

arrDemp = arr => {
  let newArr = [];
  let m = {};
  for (let i = 0; i < arr.length; i++) {
    let n = arr[i]; if (m[n]) { } else { newArr.push(arr[i]); m[n] = true; } } return newArr; } let arr = [1,2,3,5,4,5,4,3,6] console.log(arrDemp(arr)); // [ 1, 2, 3, 5, 4, 6 ] 

You can also use ES6 in new Setone step (note compatible)

let arr = [1,2,3,5,4,5,4,3,6]
let arrDemp = new Set(arr)  //arrDemp是一个对象
let newArr = [...arrDemp]   //把arrDemp转化成数组
console.log(newArr);

10. statistics number of array elements that appear in each of

staArrNum = arr => {
  let obj = {};
  for (let i = 0; i < arr.length; i++) {
    let m = arr[i];
    if (obj.hasOwnProperty(m)) { obj[m] += 1; } else { obj[m] = 1; } } return obj; } let arr = [1, 2, 3, 6, 5, 3, 2, 1, 2, 3, 2, 1] console.log(staArrNum(arr)); // { '1': 3, '2': 4, '3': 3, '5': 1, '6': 1 } 

11. Get the specified element in the array, return the subscript

arrFinNum = function (arr,num) {
  let index = -1;
  for (let i = 0; i < arr.length; i++) { if (num == arr[i]) { index = i; break; } } return index; } let arr = [1,2,3,4,5,6] console.log(arrFinNum(arr,4)); // 3 

12. Delete the array elements

delArrNum = (arr,val) => {
  let index = arrFinNum(arr, val) //调用了前面自行添加的arrFinNum方法
  if (index != -1) {
    return arr.splice(index, 1); } } 

Examples

let arr = [1, 2, 3, 4, 5, 6]

arrFinNum = (arr, num) => {
  let index = -1;
  for (let i = 0; i < arr.length; i++) { if (num == arr[i]) { index = i; break; } } return index; } delArrNum = (arr,val) => { let index = arrFinNum(arr, val) //调用了前面自行添加的arrFinNum方法 if (index != -1) { return arr.splice(index, 1); } } console.log(delArrNum(arr,2)); // [ 2 ] 

13. The time stamp format is converted into YMD

let date = Date.parse(new Date()) //  获取当前时间戳(毫秒)

dateFormat = (timestamp, formats) => {
  // formats格式包括
  // 1. Y-m-d
  // 2. Y-m-d H:i:s
  // 3. Y年m月d日
  // 4. Y年m月d日 H时i分
  formats = formats || 'Y-m-d';
  let zero = function (value) { if (value < 10) { return '0' + value; } return value; }; let myDate = timestamp ? new Date(timestamp) : new Date(); let year = myDate.getFullYear(); let month = zero(myDate.getMonth() + 1); let day = zero(myDate.getDate()); let hour = zero(myDate.getHours()); let minite = zero(myDate.getMinutes()); let second = zero(myDate.getSeconds()); return formats.replace(/Y|m|d|H|i|s/ig, function (matches) { return ({ Y: year, m: month, d: day, H: hour, i: minite, s: second })[matches]; }); }; console.log(dateFormat(date,'Y-m-d')); 

The digital ellipsis than 9

num_filter = val =>{
  val = val?val-0:0;
  if (val > 9 ) {
    return "…"
  }else{
    return val; } } 

15. A digital display over 99 99+

ninenum_filter = val =>{
  val = val?val-0:0;
  if (val > 99 ) {
    return "99+"
  }else{
    return val; } } 

16. In

let date = Date.parse(new Date()) //  获取当前时间戳(毫秒)

dateY = time =>{
  let newDate = new Date(time);
  let {y}={y:newDate.getFullYear()};
  return `${y}`; } console.log(dateY(date)); 

17. years

let date = Date.parse(new Date()) //  获取当前时间戳(毫秒)

dateYM = time => {
  let newDate = new Date(time);
  let { y, m, d } = { y: newDate.getFullYear(), m: newDate.getMonth() + 1, d: newDate.getDate() };
  return `${y}-${m}`; } console.log(dateYM(date)); 

19. Date

According to their needs, add or delete your own time

let date = Date.parse(new Date()) //  获取当前时间戳(毫秒)

dateymd = time => {
  let newDate = new Date(time);
  let { y, m, d } = { y: newDate.getFullYear(), m: newDate.getMonth() + 1, d: newDate.getDate() };
  return `${y}-${m}-${d}`; } console.log(dateymd2(date)); 

20. The date when minutes and seconds

let date = Date.parse(new Date()) //  获取当前时间戳(毫秒)

dateTime = time => {
  let newDate = new Date(time);
  let { y, M, d, h, m, s } = { y: newDate.getFullYear(), M: newDate.getMonth() + 1, d: newDate.getDate(), h: newDate.getHours(), m: newDate.getMinutes(), s: newDate.getSeconds() };
  return `${y}-${M}-${d} ${h}:${m}:${s}`; } console.log(dateTime(date)); 

21. Bank card division

bank_filter = val =>{
  val += '';
  val = val.replace(/(\s)/g,'').replace(/(\d{4})/g,'$1 ').replace(/\s*$/,'');
  return val; } 

22. Before time N calculated

time_filter = time => {
  time -= 0;
  let difTime = new Date().getTime() - time;
  let { h, m } = { h: parseInt(difTime / (3600 * 1000)), m: parseInt(difTime / (60 * 1000)) };
  let msg = "";
  if (h < 1) { msg = `${m}分钟前`; } else if (h >= 1 && h <= 24) { msg = `${h}小时前`; } else if (h > 24) { h = parseInt(h / 24) msg = `${h}天前`; } return msg; } //输入一个时间戳,能计算出来是多长时间之前 console.log(time_filter(68464646464)); //17445天前 

23. The binary search

//非递归实现
binarySearch = (arr, key) => {
  let high = arr.length - 1,
    low = 0;
  while (low <= high) {
    let m = Math.floor((high + low) / 2);
    if (arr[m] == key) {
      return m; } if (key > arr[m]) { low = m + 1; } else { high = m - 1; } } return false; } let arr = [-1, 1, 3, 4, 5, 8, 32, 234, 12, 42]; console.log(binarySearch(arr, 4)); 复制代码
//递归实现
binarySearch = (arr, low, high, key) => {
  if (low > high) {
    return -1;
  }
  let mid = parseInt((high + low) / 2);
  if (arr[mid] == key) {
    return mid; } else if (arr[mid] > key) { high = mid - 1; return binarySearch(arr, low, high, key); } else if (arr[mid] < key) { low = mid + 1; return binarySearch(arr, low, high, key); } }; let arr = [-1, 1, 3, 4, 5, 8, 32, 234, 12, 42]; console.log(binarySearch(arr, 0, 13, 5)); 

24. Last week, this week, next week get time

getDate = n => {
  let now = new Date();
  let year = now.getFullYear();
  let month = now.getMonth() + 1;
  let date = now.getDate();
  let day = now.getDay(); if (day !== 0) { n = n + (day - 1); } else { n = n + day; } if (day) { if (month > 1) { month = month; } else { year = year - 1; month = 12; } } now.setDate(now.getDate() - n); year = now.getFullYear(); month = now.getMonth() + 1; date = now.getDate(); let s = year + "-" + (month < 10 ? "0" + month : month) + "-" + (date < 10 ? "0" + date : date); return s; } /***参数都是以周一为基准的***/ //上周的开始时间 // console.log(getDate(7)); //上周的结束时间 // console.log(getDate(1)); //本周的开始时间 // console.log(getDate(0)); //本周的结束时间 // console.log(getDate(-6)); //下周的开始时间 // console.log(getDate(-7)); //下周结束时间 // console.log(getDate(-13)); 

25. Get the current time (date)

getNowDate = () => {
  let nowdate = new Date();
  let y = nowdate.getFullYear();
  let m = nowdate.getMonth() + 1;
  let d = nowdate.getDate();
  return y + "-" + m + "-" + d; } 

26. The current time (year, month, day, hour)

getDateTime = () => {
  let date = new Date();
  year = date.getFullYear();
  month = date.getMonth() + 1;
  day = date.getDate();
  hour = date.getHours() + 1;
  minute = date.getMinutes();
  second = date.getSeconds();
  month = checkTime(month);
  day = checkTime(day);
  hour = checkTime(hour);
  minute = checkTime(minute);
  second = checkTime(second);
  function checkTime(i) {
    if (i < 10) {
      i = "0" + i;
    }
    return i; } return "" + year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒" } console.log(getDateTime()); 

27. The image stabilization with the throttle

/**
 * 函数防抖 (只执行最后一次点击)
 */
Debounce = (fn, t) => {
    let delay = t || 500;
    let timer;
    return function () { let args = arguments; if(timer){ clearTimeout(timer); } timer = setTimeout(() => { timer = null; fn.apply(this, args); }, delay); } }; /* * 函数节流 */ Throttle = (fn, t) => { let last; let timer; let interval = t || 500; return function () { let args = arguments; let now = +new Date(); if (last && now - last < interval) { clearTimeout(timer); timer = setTimeout(() => { last = now; fn.apply(this, args); }, interval); } else { last = now; fn.apply(this, args); } } }; 

028. deep copy

deepClone = source => {
  const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
  for (let keys in source) { // 遍历目标 if (source.hasOwnProperty(keys)) { if (source[keys] && typeof source[keys] === 'object') { // 如果值是对象,就递归一下 targetObj[keys] = source[keys].constructor === Array ? [] : {}; targetObj[keys] = deepClone(source[keys]); } else { // 如果不是,就直接赋值 targetObj[keys] = source[keys]; } } } return targetObj; } let str1 = { arr: [1, 2, 3], obj: { key: 'value' }, fn: function () { return 1; } }; let str3 = deepClone(str1); console.log(str3 === str1); // false console.log(str3.obj === str1.obj); // false console.log(str3.fn === str1.fn); // true 

29. Get the size of the viewport

Need to run in an HTML file

function getViewportOffset() {
    if (window.innerWidth) {
        return { w: window.innerWidth, h: window.innerHeight } } else { // ie8及其以下 if (document.compatMode === "BackCompat") { // 怪异模式 return { w: document.body.clientWidth, h: document.body.clientHeight } } else { // 标准模式 return { w: document.documentElement.clientWidth, h: document.documentElement.clientHeight } } } } 

30. Countdown (beginning of the end, a custom time)

The following code is written in the HTML body

<span id="clock">00:01:00:00</span>
<input id="start" type="button" value="开始" onclick="run()"> <input id="end" type="button" value="结束" onclick="stop()"> <script language="Javascript"> var normalelapse = 100; var nextelapse = normalelapse; var counter; var startTime; var start = clock.innerText; var finish = "00:00:00:00"; var timer = null; // 开始运行 function run() { start.disabled = true; end.disabled = false; counter = 0; // 初始化开始时间 startTime = new Date().valueOf(); // nextelapse是定时时间, 初始时为100毫秒 // 注意setInterval函数: 时间逝去nextelapse(毫秒)后, onTimer才开始执行 timer = window.setInterval("onTimer()", nextelapse); } // 停止运行 function stop() { start.disabled = false; end.disabled = true; window.clearTimeout(timer); } window.onload = function () { end.disabled = true; }; // 倒计时函数 function onTimer() { if (start == finish) { window.clearInterval(timer); alert("时间到了!"); return; } var hms = new String(start).split(":"); var ms = new Number(hms[3]); var s = new Number(hms[2]); var m = new Number(hms[1]); var h = new Number(hms[0]); ms -= 10; if (ms < 0) { ms = 90; s -= 1; if (s < 0) { s = 59; m -= 1; } if (m < 0) { m = 59; h -= 1; } } var ms = ms < 10 ? ("0" + ms) : ms; var ss = s < 10 ? ("0" + s) : s; var sm = m < 10 ? ("0" + m) : m; var sh = h < 10 ? ("0" + h) : h; start = sh + ":" + sm + ":" + ss + ":" + ms; clock.innerText = start; // 清除上一次的定时器 window.clearInterval(timer); // 自校验系统时间得到时间差, 并由此得到下次所启动的新定时器的时间nextelapse counter++; var counterSecs = counter * 100; var elapseSecs = new Date().valueOf() - startTime; var diffSecs = counterSecs - elapseSecs; nextelapse = normalelapse + diffSecs; if (nextelapse < 0) nextelapse = 0; // 启动新的定时器 timer = window.setInterval("onTimer()", nextelapse); } </script> 

31. Timer (no start and end)

The following code is written in the HTML body

<div id="time"></div>
<script type="text/javascript">
    var maxtime = 10 * 60; // 
    function CountDown() { if (maxtime >= 0) { minutes = Math.floor(maxtime / 60); seconds = Math.floor(maxtime % 60); msg = "还有" + minutes + "分" + seconds + "秒"; document.all["time"].innerHTML = msg; if (maxtime == 5 * 60) alert("仅剩5分钟"); --maxtime; } else { clearInterval(timer); alert("时间到!"); } } timer = setInterval("CountDown()", 1000); </script> 

32. The acquisition last week (month), next week (month) date range

Pay attention to mutual references between the function and use of this points to problems

/*
 * @param dateNow :Date类
 * @param intervalDays :间隔天数
 * @param bolPastTime  :Boolean,判断在参数date之前,还是之后,
 */
getDateRange = (dateNow, intervalDays, bolPastTime) => {
    let oneDayTime = 24 * 60 * 60 * 1000;
    let list = [];
    let lastDay;
    if (bolPastTime == true) { lastDay = new Date(dateNow.getTime() - intervalDays * oneDayTime); list.push(formateDate(lastDay)); list.push(formateDate(dateNow)); } else { lastDay = new Date(dateNow.getTime() + intervalDays * oneDayTime); list.push(formateDate(dateNow)); list.push(formateDate(lastDay)); } return list; } function formateDate (time) { let year = time.getFullYear() let month = time.getMonth() + 1 let day = time.getDate() if (month < 10) { month = '0' + month } if (day < 10) { day = '0' + day } return year + '-' + month + '-' + day + '' } var date = new Date(); var list = getDateRange(date, 6, true) console.log("获取近一周日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]); var list = getDateRange(date, 30, true) console.log("获取近一个月日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]); var list = getDateRange(date, 0, true) console.log("获取今天日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]); var list = getDateRange(date, 1, true) console.log("获取昨天日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[0]); var list = getDateRange(date, 6, false) console.log("获取下一周日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]); var list = getDateRange(date, 30, false) console.log("获取下一个月日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]); /* 获取近一周日期范围: 开始日期:2019-12-04;结束日期:2019-12-10 获取近一个月日期范围: 开始日期:2019-11-10;结束日期:2019-12-10 获取今天日期范围: 开始日期:2019-12-10;结束日期:2019-12-10 获取昨天日期范围: 开始日期:2019-12-09;结束日期:2019-12-09 获取下一周日期范围: 开始日期:2019-12-10;结束日期:2019-12-16 获取下一个月日期范围: 开始日期:2019-12-10;结束日期:2020-01-09 */ 

33. The replacement character string (time format)

/*
*   str 表示将要替换的字符串
*   l 表示你将要替换的字符
*   r 表示你想要替换的字符
*/
transFormat = (str, l, r) => {
    let reg = new RegExp(l, 'g') // g表示全部替换,默认替换第一个
    str = str.replace(reg, r)
    return str
}

console.log(transFormat('2019-12-13', '-', '/')); // 2019/12/13 console.log(transFormat('2019-12-13', '-', '')); // 20191213 

34. The time zero padding

If the acquisition time is a number, then fill a 0

Appendzero = obj => {
    if (obj < 10) return "0" + obj;
    else return obj; } 

35. get half an hour before the current time

getHalfHour = () => {
  let date = new Date(new Date().getTime() - 30 * 60 * 1000);
  let hh = date.getHours()
  let mm = date.getMinutes()
  let ss = date.getSeconds()
  return hh + ':' + mm + ':' + ss } 

There may be time when we use the data, you need to have time to double digits, this time, we only need to use the above time zero padding method, can be the perfect solution, as follows:

getHalfHour = () => {
  let date = new Date(new Date().getTime() - 30 * 60 * 1000);
  let hh = Appendzero(date.getHours())
  let mm = Appendzero(date.getMinutes())
  let ss = Appendzero(date.getSeconds())
  return hh + ':' + mm + ':' + ss } function Appendzero(obj) { if (obj < 10) return "0" + obj; else return obj; } 

Similar immediately below these two methods! ! !

36. The acquisition before the current time 1 hour

getOneHour = () => {
  let date = new Date(new Date().getTime() - 1 * 60 * 60 * 1000);
  let hh = date.getHours()
  let mm = date.getMinutes()
  let ss = date.getSeconds()
  return hh + ':' + mm + ':' + ss } 

37. The acquisition time 12 hours before the current time

getHalfHour = () => {
  let date = new Date(new Date().getTime() - 30 * 60 * 1000);
  let hh = date.getHours()
  let mm = date.getMinutes()
  let ss = date.getSeconds()
  return hh + ':' + mm + ':' + ss } 

38. The digital zero padding before

/*
*   num为你想要进行填充的数字
*   length为你想要的数字长度
*/

//迭代方式实现
padding1=(num, length)=> {
  for(let len = (num + "").length; len < length; len = num.length) {
      num = "0" + num;            
  }
  return num; } //递归方式实现 padding2=(num, length) =>{ if((num + "").length >= length) { return num; } return padding2("0" + num, length) } //转为小数 padding3=(num, length)=> { let decimal = num / Math.pow(10, length); //toFixed指定保留几位小数 decimal = decimal.toFixed(length) + ""; return decimal.substr(decimal.indexOf(".")+1); } //填充截取法 padding4=(num, length)=> { //这里用slice和substr均可 return (Array(length).join("0") + num).slice(-length); } //填充截取法 padding5=(num, length)=> { let len = (num + "").length; let diff = length+1 - len; if(diff > 0) { return Array(diff).join("0") + num; } return num; } 
 

Guess you like

Origin www.cnblogs.com/xuziwen/p/12036972.html