js常用方法封装

原文地址

NPM地址 使用方法相同

url参数提取

//提取url中的参数
function query(url) {
if(!(url instanceof String )) return {}
url = url.split('?')[1] //提取url问号?之后的字符串
if(!url){
return {}
}
url = url.split('&') //分离&之间的字符串参数
if(!url){
return {}
}
let params = {}
url.filter(item => {
item = item.toString().split('=')
let key = item[0]
let value = item[1]

params[key]= value

})
return params
}
//返回值为{key:value}

深拷贝

function cloneLoop(x) {
    //如果不是对象或者数组 直接返回
    if(!(x instanceof Object) || !(x instanceof Array) ) return x

    // 栈
    const loopList = [
        {
            parent: root,
            key: undefined,
            data: x,
        }
    ];

    while(loopList.length) {
        // 深度优先
        const node = loopList.pop();
        const parent = node.parent;
        const key = node.key;
        const data = node.data;

        // 初始化赋值目标,key为undefined则拷贝到父元素,否则拷贝到子元素
        let res = parent;
        if (typeof key !== 'undefined') {
            res = parent[key] = {};
        }

        for(let k in data) {
            if (data.hasOwnProperty(k)) {
                if (typeof data[k] === 'object') {
                    // 下一次循环
                    loopList.push({
                        parent: res,
                        key: k,
                        data: data[k],
                    });
                } else {
                    res[k] = data[k];
                }
            }
        }
    }

    return root;
}

时间格式处理

//主要用于处理相隔多少天的日期查询
function dateFormat (subtract, isStart) { //时间差(天) //  是开始时间还是结束时间
    let nowDate = new Date().getTime() //今天的时间 1970 年 1 月 1 日至今的毫秒数
    let subDate = subtract * 24 * 60 * 60 * 1000 //计算减去所设置的时间
    let newDate = new Date(nowDate - subDate) //减去之后的时间

    let year = newDate.getFullYear() //年
    let month = newDate.getMonth() + 1 //月 之所以+1 是因为月份是0-11
    if (month < 10) {
        month = '0' + month
    }
    let day = newDate.getDate() //日
    if (day < 10) {
        day = '0' + day
    }
    let HMS //小时分钟秒
    if (isStart) { //开始时间
        HMS = ' 00:00:00'
    } else {
        HMS = ' 23:59:59'
    }
    let date = year + '-' + month + '-' + day + HMS
    return date
}

sessionStorage的存取

class Session {
    setSession(key, value) {
        window.sessionStorage.setItem(key, value)
    }
    getSession(key) {
        if (typeof key === 'string') {
            return window.sessionStorage.getItem(key) || ''
        }
        if (key instanceof Array) {
            const setKey = [...new Set(key)]
            let newObj = {}
            setKey.forEach(item => {
                const value = window.sessionStorage.getItem(item) || ''
                if (value) {
                    newObj[item] = value
                }
            })
            return newObj
        }
    }
}
//get方法支持数组格式 如['key1','key2'] 返回值为{key1:key1,key2:key2}

localStorage

class Storage {
    setStorage(key, value) {
        window.localStorage.setItem(key, value)
    }
    getStorage(key) {
        if (typeof key === 'string') {
            return window.localStorage.getItem(key) || ''
        }
        if (key instanceof Array) {
            const setKey = [...new Set(key)]
            let newObj = {}
            setKey.forEach(item => {
                const value = window.localStorage.getItem(item) || ''
                if (value) {
                    newObj[item] = value
                }
            })
            return newObj
        }
    }
}
//get方法支持字符串和数组
//
export default new Storage()

快排

function sort(arr) {
if (arr.length <= 1) {
return arr
}
const pivot = arr.splice(0, 1)[0]
const left = [],
right = []

arr.forEach((item, index) => {
if (item < pivot) {
left.push(item)
} else {
right.push(item)
}
})
// return arrSort(left).concat(pivot,arrSort(right))
return [...sort(left), pivot, ...sort(right)]
}
// 写着玩的 没啥用 理解原理就行
(0)

相关推荐

  • 34.冒泡排序

    参考网站  https://visualgo.net/ 冒泡排序: 前后两个数两两进行比较 前 < 后, 则后面一个继续与下一个比较 前 > 后,则交换位置,再与下一个比较 第一轮比较完成 ...

  • 如何根据key合并数组中的对象

    原文地址 如何根据key合并数组中的对象(已同步到npm lm-public-js 中) 项目中经常会遇到,array内包含object这个格式的json 需要我们根据一个key去合并其中的对象,一般 ...

  • JS脚本获取URL信息的方法

    JS获取URL信息类 主要功能有: 1.获取URL基本信息,包括:网址,协议,端口号等. 2.地址栏获取参数. 3.将json格式的参数对象转换成字符串. //获取URL信息 var shaoURL ...

  • 前端面试题之JavaScript

    ES6语法有哪些,分别怎么用 参考链接:http://es6.ruanyifeng.com/ new的执行过程 创建一个空对象: 将构造函数的 prototype 属性赋值给新对象的 __proto_ ...

  • 35.数组.选择排序

    选择排序: 第一轮: 第0个与第1个比, 如果  第0个 > 第1个  那就交换位置,第0个再与第2个比...... 第二轮: 第1个与第2比, ...................直到排序完 ...

  • node.js静态资源访问

    node.js静态资源访问

  • sortablejs + vue的拖拽效果 列表个数不固定 刷新后保持拖拽后的效果

    <template> <div class="hello"> <div v-for="(list, index) in merge" ...

  • 对象(数组)的深克隆和浅克隆(头条)

    let obj = { a: 100, b: [10, 20, 30], c: { x: 10 }, d: /^\d $/ }; // 1.浅克隆,obj和obj2是没有关系的,第二级的对象还是引用的 ...

  • element.ui 省市级联选择器

    原始数据 const obj= { "aa": { "110000": "北京市", "120000": "天 ...

  • Javascript获取GET参数

    直接上代码 function getQueryVariable() { let query = window.location.search.substring(1); let key_values ...