前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​助力你的工作效率, 封装一些常用的工具函数(一)

​助力你的工作效率, 封装一些常用的工具函数(一)

原创
作者头像
前端老鸟
修改2019-07-29 18:36:46
4530
修改2019-07-29 18:36:46
举报
文章被收录于专栏:front-end technologyfront-end technology

为了提高以后自己的工作效率,今天抽取了一些公共函数,希望大家可以一起总结!后续我会陆陆续续更新工具函数

输入一个值,返回其数据类型

代码语言:txt
复制
function dataType(data) {
  return Object.prototype.toString.call(data)
}

数据去重

代码语言:txt
复制
function unique(arr) {
    return [...new Set(arr)]
}

字符串去重

代码语言:txt
复制
String.prototype.unique = function () {
    var obj = {},
    str = '',
    len = this.length;
    for (var i = 0; i < len; i++) {
      if (!obj[this[i]]) {
        str += this[i];
        obj[this[i]] = true;
      }
    }
    return str;
}

去除连续的字符串

function unique(str) {
    return str.replace(/(\w)\1+/g, '$1')
}

reverse底层原理和扩展

代码语言:txt
复制
Array.prototype.reverse = function () {
    var len = this.length;
    for (var i = 0; i < len; i++) {
        var temp = this[i];
        this[i] = this[len - 1 - i];
        this[len - 1 - i] = temp;
    }
    return this;
}

圣杯模式的继承

代码语言:txt
复制
function inherit(Target, Origin) {
    function F() {};
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor = Target;
    // 最终的原型指向
    Target.prop.uber = Origin.prototype;
}

找出字符串中第一次只出现一次的字母

代码语言:txt
复制
String.prototype.firstAppear = function () {
    var obj = {},
        len = this.length;
    for (var i = 0; i < len; i++) {
        if (obj[this[i]]) {
            obj[this[i]]++;
        } else {
            obj[this[i]] = 1;
        }
    }
  for (var prop in obj) {

    if (obj[prop] == 1) {
        return prop;
    }
  }
}

找元素的第n级父元素

代码语言:txt
复制
function parents(ele, n) {
  while (ele && n) {
      ele = ele.parentElement ? ele.parentElement : ele.parentNode;
      n--;
  }
  return ele;
}

判断元素有没有子元素

代码语言:txt
复制
function hasChildren(e) {
    var children = e.childNodes,
        len = children.length;
    for (var i = 0; i < len; i++) {
        if (children[i].nodeType === 1) {
            return true;
        }
    }
    return false;
}

获取url中的参数

代码语言:txt
复制
function getWindonHref() {
    var sHref = window.location.href;
    var args = sHref.split('?');
    if (args[0] === sHref) {
        return '';
    }
    var hrefarr = args[1].split('#')[0].split('&');
    var obj = {};
    for (var i = 0; i < hrefarr.length; i++) {
        hrefarr[i] = hrefarr[i].split('=');
        obj[hrefarr[i][0]] = hrefarr[i][1];
    }
    return obj;
}

cookie管理

代码语言:txt
复制
var cookie = {
    set: function (name, value, time) {
        document.cookie = name + '=' + value + '; max-age=' + time;
        return this;
    },
    remove: function (name) {
        return this.setCookie(name, '', -1);
    },
    get: function (name, callback) {
        var allCookieArr = document.cookie.split('; ');
        for (var i = 0; i < allCookieArr.length; i++) {
            var itemCookieArr = allCookieArr[i].split('=');
            if (itemCookieArr[0] === name) {
                return itemCookieArr[1]
            }
        }
        return undefined;
    }
}

防抖

代码语言:txt
复制
function debounce(handle, delay) {
    var timer = null;
    return function () {
      var _self = this,
      _args = arguments;
      clearTimeout(timer);
      timer = setTimeout(function () {
          handle.apply(_self, _args)
      }, delay)
    }
}

节流

代码语言:txt
复制
function throttle(handler, wait) {
    var lastTime = 0;
    return function (e) {
      var nowTime = new Date().getTime();
      if (nowTime - lastTime > wait) {
        handler.apply(this, arguments);
        lastTime = nowTime;
      }
    }
}

函数柯里化

代码语言:txt
复制
function curryIt(fn) {
  var length = fn.length,
      args = [];
  var result = function (arg) {
    args.push(arg);
    length--;
    if (length <= 0) {
        return fn.apply(this, args);
    } else {
        return result;
    }
  }
  return result
}

动态设置微信的title

代码语言:txt
复制
function setTitle (title) {
  document.title = title
  let userAgent = window.navigator.userAgent.toLowerCase()
  let isiOS = userAgent.indexOf('applewebkit') >= 0
  let isWechat = userAgent.indexOf('micromessenger') >= 0
  if (isiOS && isWechat) {
    let iframe = document.createElement('iframe')
    iframe.style.display = 'none'
    document.body.appendChild(iframe)
    iframe.onload = function () {
      setTimeout(function () {
        iframe.remove()
      }, 0)
    }
  }
}

判断移动端的设备

代码语言:txt
复制
function device () {
  let isType = false
  const u = navigator.userAgent
  if (u.indexOf('Android') > -1 || u.indexOf('Adr') > -1) {
    isType = false
  } else if (u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {
    isType = true
  }
  return isType
}

localStorage设值、获取值、移除和清空

代码语言:txt
复制
save(key, item) {
  window.localStorage.setItem(key, JSON.stringify(item))
},
fetch(key) {
  let localStorage = window.localStorage.getItem(key)
  return localStorage ? JSON.parse(localStorage) : null
},
remove(key) {
  window.localStorage.removeItem(key)
},
clear() {
  window.localStorage.clear()
}

日期函数的处理

代码语言:txt
复制
function(val, format) {
  var deFormat, formateDate, month, year, date, hours, mins, seconds
  var formats = {
    LLLL: function() {
      return `${year}年${month}月${date}日  ${hours}:${mins}`
    },
    LLL: function() {
      return `${year}年${month}月${date}日`
    },
    llll: function() {
      return `${year}.${month}.${date}  ${hours}:${mins}`
    },
    lll: function() {
      return `${year}.${month}.${date}`
    },
    LL: function() {
      return `${month}月${date}日`
    },
    mm: function() {
      return `${hours}:${mins}`
    },
    Lll: function() {
      return `${year}-${month}-${date}`
    },
    Llls: function() {
      return `${year}/${month}/${date}`
    },
    Lllss: function() {
      return `${year}/${month}/${date} ${hours}:${mins}:${seconds}`
    },
    Lllmm: function() {
      return `${year}-${month}-${date}  ${hours}:${mins}`
    }
  }
  if (!val && typeof val !== 'number') {
    return ''
  }
  deFormat = format || 'LLL'
  formateDate = new Date(val)
  year = formateDate.getFullYear()

  function changeDate(val) {
    var str = '00'
    if (val !== undefined && val !== null) {
      str = val.toString()
      str = str.length < 2 ? `0${str}` : str
    }
    return str
  }

  month = changeDate(formateDate.getMonth() + 1)
  date = changeDate(formateDate.getDate())
  hours = changeDate(formateDate.getHours())
  mins = changeDate(formateDate.getMinutes())
  seconds = changeDate(formateDate.getSeconds())
  return formats[deFormat]()
})

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入一个值,返回其数据类型
  • 数据去重
  • 字符串去重
  • reverse底层原理和扩展
  • 圣杯模式的继承
  • 找出字符串中第一次只出现一次的字母
  • 找元素的第n级父元素
  • 判断元素有没有子元素
  • 获取url中的参数
  • cookie管理
  • 防抖
  • 节流
  • 函数柯里化
  • 动态设置微信的title
  • 判断移动端的设备
  • localStorage设值、获取值、移除和清空
  • 日期函数的处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档