類型判斷
function istype(o, type) {
if (type) {
var _type = type.toLowerCase();
}
switch (_type) {
case 'string':
return Object.prototype.toString.call(o) === '[object String]';
case 'number':
return Object.prototype.toString.call(o) === '[object Number]';
case 'boolean':
return Object.prototype.toString.call(o) === '[object Boolean]';
case 'undefined':
return Object.prototype.toString.call(o) === '[object Undefined]';
case 'null':
return Object.prototype.toString.call(o) === '[object Null]';
case 'function':
return Object.prototype.toString.call(o) === '[object Function]';
case 'array':
return Object.prototype.toString.call(o) === '[object Array]';
case 'object':
return Object.prototype.toString.call(o) === '[object Object]';
case 'nan':
return isNaN(o);
case 'elements':
return Object.prototype.toString.call(o).indexOf('HTML') !== -1;
default:
// return Object.prototype.toString.call(o)
return false;
}
}
數(shù)組 對象 去重方法(一)
function removeRepeatArray(arr, key) {
var arrResult = [];
if (this.istype(arr[0], "object") && this.istype(key, "string")) {
for (var i = 0; i < arr.length; i++) {
var state = true;
for (var j = 0; j < arrResult.length; j++) {
if (arr[i][key] == arrResult[j][key]) {
state = false;
}
}
if (state) {
arrResult.push(arr[i]);
}
}
} else {
arrResult = arr.filter(function (item, index, self) {
return self.indexOf(item) === index;
});
}
return arrResult;
}
數(shù)組 對象 去重方法(二)
function setArrObj(data) {
let obj = {};
return data.reduce((cur, next) => {
obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
return cur;
}, [])
}
數(shù)組(字符串)一個(gè)元素出現(xiàn)的次數(shù)
function getEleCount(obj, ele) {
var num = 0;
for (var i = 0, len = obj.length; i < len; i++) {
if (ele === obj[i]) {
num++;
}
}
return num;
}
刪除數(shù)組中一個(gè)元素
function removeArrayForValue(arr, val, type) {
return arr.filter(function (item) {
return type ? item.indexOf(val) === -1 : item !== val;
});
}
獲取(對象數(shù)組)某些項(xiàng)
function getOptionArray(arr, keys, val) {
var newArr = [];
if (!keys) {
return arr;
}
var _keys = keys.split(',');
if (val) {
var _vals = val;
newArr = arr.filter(function (i) {
var state = _keys.every(function (j, index) {
if (i[j] == _vals[index]) {
return true;
} else {
return false;
}
});
return state;
});
return newArr;
}
if (_keys.length === 1) {
for (var i = 0, len = arr.length; i < len; i++) {
newArr.push(arr[i][keys]);
}
return newArr;
}
var newArrOne = {};
for (var i = 0, len = arr.length; i < len; i++) {
newArrOne = {};
for (var j = 0, len1 = _keys.length; j < len1; j++) {
newArrOne[_keys[j]] = arr[i][_keys[j]];
}
newArr.push(newArrOne);
}
return newArr;
}
數(shù)組扁平化
function steamroller(arr) {
var newArr = [],
_this = this;
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
// 如果是數(shù)組措伐,調(diào)用(遞歸)steamroller 將其扁平化
// 然后再 push 到 newArr 中
newArr.push.apply(newArr, _this.steamroller(arr[i]));
} else {
// 不是數(shù)組直接 push 到 newArr 中
newArr.push(arr[i]);
}
}
return newArr;
}
去空 1-所有空格 2-前后空格 3-前空格 4-后空格
function trim(str, type) {
switch (type) {
case 1:
return str.replace(/\s+/g, "");
case 2:
return str.replace(/(^\s*)|(\s*$)/g, "");
case 3:
return str.replace(/(^\s*)/g, "");
case 4:
return str.replace(/(\s*$)/g, "");
default:
return str;
}
}
檢測字符串是否符合類型
email :郵箱 phone :手機(jī)號 tel :電話號 number :數(shù)值 english :英文 text :文本 chinese :中文 lower :小寫 upper :大寫
function checkType(str, type) {
switch (type) {
case 'email':
return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
case 'phone':
return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
case 'tel':
return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
case 'number':
return /^[0-9]$/.test(str);
case 'english':
return /^[a-zA-Z]+$/.test(str);
case 'text':
return /^\w+$/.test(str);
case 'chinese':
return /^[\u4E00-\u9FA5]+$/.test(str);
case 'lower':
return /^[a-z]+$/.test(str);
case 'upper':
return /^[A-Z]+$/.test(str);
default:
return true;
}
}
檢測密碼強(qiáng)度
0:密碼小于6位 1:密碼為純數(shù)字 2:密碼為數(shù)字加小寫或者大寫字母 3:密碼為數(shù)字特纤,大小寫字母 4:密碼為數(shù)字,大小寫字母侥加,.-_等
function checkPwd(str) {
var nowLv = 0;
if (str.length < 6) {
return nowLv;
}
if (/[0-9]/.test(str)) {
nowLv++;
}
if (/[a-z]/.test(str)) {
nowLv++;
}
if (/[A-Z]/.test(str)) {
nowLv++;
}
if (/[\.|-|_]/.test(str)) {
nowLv++;
}
return nowLv;
}
查找字符串,出現(xiàn)在原字符串里的次數(shù)
function countStr(str, strSplit) {
return str.split(strSplit).length - 1;
}
找出最長單詞
function longestWord(str, splitType) {
var _splitType = splitType || /\s+/g,
_max = 0,
result = null;
var strArr = str.split(_splitType);
strArr.forEach(function (item) {
if (_max < item.length) {
_max = item.length;
result = item;
}
});
return result;
}
實(shí)現(xiàn)字符串長度截取粪躬,并添加省略符
function cutstr(str, len) {
var temp;
var icount = 0;
var patrn = /[^\x00-\xff]/;
var strre = "";
for (var i = 0; i < str.length; i++) {
if (icount < len - 1) {
temp = str.substr(i, 1);
if (patrn.exec(temp) == null) {
icount = icount + 1;
} else {
icount = icount + 2;
}
strre += temp;
} else {
break;
}
}
return strre + "...";
}
對象扁平化處理
function steamObject(obj) {
var newObj = {},
_this = this;
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var element = obj[key];
if (_this.istype(element, "object")) {
var secObj = this.steamObject(element);
for (var keys in secObj) {
if (secObj.hasOwnProperty(keys)) {
newObj[keys] = secObj[keys];
}
}
} else {
newObj[key] = element;
}
}
}
return newObj;
}
rem適配
function getFontSize(psdW) {
var doc = document,
win = window;
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function recalc() {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (clientWidth > psdW) {
clientWidth = psdW;
} //設(shè)置根元素font-size大小
docEl.style.fontSize = 100 * (clientWidth / psdW) + 'px';
}; //屏幕大小改變担败,或者橫豎屏切換時(shí),觸發(fā)函數(shù)
win.addEventListener(resizeEvt, recalc, false); //文檔加載完成時(shí)镰官,觸發(fā)函數(shù)
doc.addEventListener('DOMContentLoaded', recalc, false);
}
手機(jī)類型判斷
function browserInfo(type) {
switch (type) {
case 'android':
return navigator.userAgent.toLowerCase().indexOf('android') !== -1;
case 'iphone':
return navigator.userAgent.toLowerCase().indexOf('iphone') !== -1;
case 'ipad':
return navigator.userAgent.toLowerCase().indexOf('ipad') !== -1;
case 'weixin':
return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1;
default:
return navigator.userAgent.toLowerCase();
}
}
到某一個(gè)時(shí)間的倒計(jì)時(shí)
function getEndTime(endTime) {
var startDate = new Date(); //開始時(shí)間提前,當(dāng)前時(shí)間
var endDate = new Date(endTime); //結(jié)束時(shí)間,需傳入時(shí)間參數(shù)
var t = endDate.getTime() - startDate.getTime(); //時(shí)間差的毫秒數(shù)
var d = 0,
h = 0,
m = 0,
s = 0;
if (t >= 0) {
d = Math.floor(t / 1000 / 3600 / 24) + '天';
h = Math.floor(t / 1000 / 60 / 60 % 24) + '時(shí)';
m = Math.floor(t / 1000 / 60 % 60) + '分';
s = Math.floor(t / 1000 % 60) + '秒';
return [d, h, m, s];
} else {
return [];
}
}
獲取當(dāng)前時(shí)間
function getFormetTime(fmt, time) {
//author: meizz
var date = time ? new Date(time) : new Date();
var o = {
"M+": date.getMonth() + 1,
//月份
"d+": date.getDate(),
//日
"h+": date.getHours(),
//小時(shí)
"m+": date.getMinutes(),
//分
"s+": date.getSeconds(),
//秒
"q+": Math.floor((date.getMonth() + 3) / 3),
//季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) {
//RegExp.$1返回上一次正則匹配結(jié)果中的子表達(dá)式結(jié)果泳唠,這里是yyyy
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return fmt;
}
隨機(jī)產(chǎn)生顏色
function randomColor() {
return '#' + Math.random().toString(16).substring(2).substr(0, 6); //寫法3
}
隨機(jī)返回一個(gè)范圍的數(shù)字
function randomNumber(n1, n2) {
console.log(arguments)
//randomNumber(5,10)
//返回5-10的隨機(jī)整數(shù)狈网,包括5,10
if (arguments.length === 2) {
return Math.round(n1 + Math.random() * (n2 - n1));
} //randomNumber(10)
//返回0-10的隨機(jī)整數(shù)笨腥,包括0拓哺,10
else if (arguments.length === 1) {
return Math.round(Math.random() * n1);
} //randomNumber()
//返回0-255的隨機(jī)整數(shù),包括0脖母,255
else {
return Math.round(Math.random() * 255);
}
}
設(shè)置url參數(shù)
function setUrlPrmt(obj) {
var _rs = [];
for (var p in obj) {
if (obj[p] != null && obj[p] != '') {
_rs.push(p + '=' + obj[p]);
}
}
return _rs.join('&');
}
獲取url參數(shù)
function getUrlPrmt(url) {
url = url ? url : "";
var _pa = url.substring(url.indexOf('?') + 1),
_arrS = _pa.split('&'),
_rs = {};
for (var i = 0, _len = _arrS.length; i < _len; i++) {
var pos = _arrS[i].indexOf('=');
if (pos == -1) {
continue;
}
var name = _arrS[i].substring(0, pos); // value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
_rs[name] = _arrS[i].substring(pos + 1);
}
return _rs;
}
函數(shù)節(jié)流
function delayFn(fn, delay, mustDelay) {
var timer = null;
var t_start;
return function () {
var context = this,
args = arguments,
t_cur = +new Date(); //先清理上一次的調(diào)用觸發(fā)(上一次調(diào)用觸發(fā)事件不執(zhí)行)
clearTimeout(timer); //如果不存觸發(fā)時(shí)間士鸥,那么當(dāng)前的時(shí)間就是觸發(fā)時(shí)間
if (!t_start) {
t_start = t_cur;
} //如果當(dāng)前時(shí)間-觸發(fā)時(shí)間大于最大的間隔時(shí)間(mustDelay),觸發(fā)一次函數(shù)運(yùn)行函數(shù)
if (t_cur - t_start >= mustDelay) {
fn.apply(context, args);
t_start = t_cur;
} //否則延遲執(zhí)行
else {
timer = setTimeout(function () {
fn.apply(context, args);
}, delay);
}
};
}
兩個(gè)數(shù)組取相同值
var arr = [1, 2];
var arr1 = [1, 2, 3];
var arr2 = [];
function ArrayDef(arr, arr1) {
if (arr.length >= arr1.length) {
arr.forEach(item => {
if (arr1.every(it => it != item)) {
arr2.push(item)
}
})
} else {
arr1.forEach(item => {
if (arr.every(it => it != item)) {
arr2.push(item)
}
})
}
return arr2
}
console.log(ArrayDef(arr, arr1))
input 只允許輸入數(shù)字
<input type="number" oninput="if(! /^\d+$/.test(this.value)) value=''">
onkeyup="value=value.replace(/[^\d^\.]+/g,'')" // 只允許輸入數(shù)字和小數(shù)點(diǎn)
服務(wù)器時(shí)間處理
function dateFormat(inputstr, showsplit, showweek) {
//Wed Mar 22 13:38:37 CST 2017
inputstr = inputstr + ""; //末尾加一個(gè)空格
var date = "";
var month = new Array();
month["Jan"] = '01'; month["Feb"] = '02'; month["Mar"] = '03'; month["Apr"] = '04'; month["May"] = '05'; month["Jun"] = '06';
month["Jul"] = '07'; month["Aug"] = '08'; month["Sep"] = '09'; month["Oct"] = '10'; month["Nov"] = '11'; month["Dec"] = '12';
var str = inputstr.split(" ");
date = str[5];
date += showsplit + month[str[1]] + showsplit + str[2];
return date;
}