1.深拷贝
function deepClone(obj) {
let newObj = Array.isArray(obj) ? [] : {};
if (obj && typeof obj === 'object') {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof obj[key] === 'object') {
newObj[key] = deepClone(obj[key]);
} else {
newObj[key] = obj[key];
}
}
}
}
return newObj
}
2.数组去重
function unique(arr) {
return [...new Set(arr)];
}
function unique(arr) {
let obj = {}
return arr.filter(ele => {
if (!obj[ele]) {
obj[ele] = true;
return true;
}
})
}
function unique(arr) {
let result = []
arr.forEach(item => {
if (result.indexOf(item) === -1) {
result.push(item)
}
});
return result
}
3.判断数据类型
function type(data) {
return Object.prototype.toString.call(data)
}
4.字符串去重
function unique(str) {
let obj = {};
let newStr = '';
for (let i = 0; i < str.length; i++) {
if (!obj[str[i]]) {
newStr += str[i];
obj[str[i]] = true;
}
}
return newStr;
}
function uni(str){
return str.replace(/(\w)\1+/g, '$1');
}
5.防抖
function debounce(func, delay) {
let timer = null;
return function () {
let _this = this,
_args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
func.apply(_this, _args)
}, delay)
}
}
6.节流
function throttle(func, wait) {
let lastTime = 0;
return function (e) {
let nowTime = +new Date();
if (nowTime - lastTime > wait) {
func.apply(this, arguments);
lastTime = nowTime;
}
}
}
7.拆解url参数
function matchParam(url) {
let obj = {};
url.replace(/([^?&=]+)=([^&]+)/g,(_, k, v) => obj[k] = decodeURIComponent(v));
return obj;
}
function parseParam(url) {
const paramsStr = /.+\?(.+)$/.exec(url)[1];
const params = paramsStr.split('&');
let paramsObj = {};
params.forEach(param => {
if (/=/.test(param)) {
let [key, value] = param.split('=');
value = decodeURIComponent(value);
value = /^\d+$/.test(value) ? parseInt(value) : value;
if (paramsObj.hasOwnProperty(key)) {
paramsObj[key] = [].concat(paramsObj[key], value);
} else {
paramsObj[key] = value;
}
} else {
paramsObj[param] = true;
}
});
return paramsObj;
}
8.数组排序
function quick(arr){
if(arr.length <= 1){
return arr;
}
let middleIndex = Math.floor(arr.length/2);
let middleValue = arr.splice(middleIndex,1)[0];
let leftArr = [],
rightArr = [];
for(let i = 0; i < arr.length; i++){
let temp = arr[i];
temp < middleValue ? leftArr.push(temp) : rightArr.push(temp);
}
return quick(leftArr).concat(middleValue,quick(rightArr));
}
function bubble(arr){
let temp = null;
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]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
function insert(arr){
let handle = [];
handle.push(arr[0]);
for(let i = 1; i<arr.length; i++){
let A = arr[i];
for(let j = handle.length - 1; j >= 0; j--){
let B = handle[j];
if(A > B){
handle.splice(j + 1, 0, A);
break;
}
if(j===0){
handle.unshift(A);
}
}
}
}
9.字符串处理
export const generParamsStr = (obj) => {
let rangeArr = '';
let param = '';
if (obj && typeof obj === 'object') {
for (let i in obj) {
if (rangeArr === '') {
rangeArr += '?'
}
if (Object.prototype.hasOwnProperty.call(obj, i) && obj[i] !== '') {
rangeArr += `${i}=${obj[i]}&`
}
}
return rangeArr.replace(/&$/, '')
}
return param
};
10.数组扁平化
Array.prototype.myFlat = function() {
let result = [],
_this = this;
let fn = (arr)=>{
for(let i = 0; i < arr.length; i++){
let item = arr[i];
if(Array.isArray(item)){
fn(item);
continue;
}
result.push(item);
}
}
fn(_this);
return result;
}
11.常用正则验证规则
const validateUserName = function (str) {
const reg = /^[\w\u4e00-\u9fa5]{3,10}$/;
return reg.test(str);
}
const validateMobile = function (num) {
const reg = /^1[3-9]\d{9}$/;
return reg.test(num);
}
const validatePassword = function (str) {
const reg = /^[\w.?!*<>{},;'"^\/\\\[\]]{6,12}$/;
return reg.test(str);
}
const validateEmail = function (str) {
const reg = /^\w+@[\da-z{2,}]+(\.[a-z]{2,})$/i;
return reg.test(str);
}