SOURCE

console 命令行工具 X clear

                    
>
console
// 洗牌算法
function xipai(arr) {
    return arr.sort(() => {
        return 0.5 - Math.random()
    })
}

// promiseRetry
function promiseRetry(fn, maxAttempts, delay) {
    return new Promise((resolve, reject) => {
        const runfn = (count) => {
            fn().then((res)=>{
                resolve(res)
            },(err)=>{
                if(count === maxAttempts){
                    reject(err)
                }else{
                    runfn(count+1)
                }
            })
        }
        runfn(1)
    })
}

// 颜色随机生成
function randomColor(){
    const red = Math.floor(Math.random() * 256)
    const green = Math.floor(Math.random() * 256)
    const blue = Math.floor(Math.random() * 256)
    return `#${red.toString(16)}${green.toString(16)}${blue.toString(16)}`
}

// 超时中断
function withTimeout(fn,timeout){
    return Promise.race([fn(),setTimeout(()=>{
       return new Promise(((resolve,reject)=>{
           reject('超时处理')
       }))
    },timeout)])
}

// pormiseAll
function promiseAll (arr){
    const len = arr.length
    let success = 0
    let successRes = []
    return new Promise((resolve,reject)=>{
        for (let i = 0 ; i <len ; i++){
            arr[i].then((res)=>{
                success++;
                successRes[i] = res
                if (success === len){
                    resolve(successRes)
                }
            },(err)=>{
                reject(err)
            })
        }
    })
}

// promiseAlllimit
function promiseAllLimit(arr,limits){
     const len = arr.length
    let success = 0
    let successRes = []
    return new Promise((resolve,reject)=>{
        const runTask = (index)=>{
            if (index >= len) return 
            arr[index].then((res)=>{
                success++;
                successRes[index] = res
                 if (success === len){
                    resolve(successRes)
                }else{
                    runTask(index+1)
                }
            },(err)=>{
                reject(err)
            })
        }
        for (let i = 0 ; i < limits ; i++){
            runTask(i)
        }
    })
}

// 两种方式的斐波那契数列
function n1(n){
    const dp = [1,1,2]
    for (let i = 3 ; i < n ; i++){
        dp[i] = dp[i-2] + dp[i-1]
    }
    return dp[n-1]
}

function n2(n){
    function dfs(n){
        if (n === 1 ||  n===2){
            return 1
        }
        return dfs(n-2) + dfs(n-1)
    }
    return dfs(n)
}

function getUrlParams(url){
    const [_,value] = url.split('?')
    const valArr = value.split('&')
    const obj = {}
    for (const item of valArr){
        const [key,nvalue] = item.split('=')
        obj[key] = decodeURIComponent(nvalue)
    }
    return obj
}

const toCase = (str) => {
    let strArr = str.split("")
    for (let i = 0; i < strArr.length; i++) {
        if (strArr[i] === '_') {
            strArr.splice(i, 1)
            strArr[i] = strArr[i].toUpperCase()
        }
    }
    return strArr.join('')
}

function camelToSnake(camelCase){
    let camelCaseArr = camelCase.split('')
    const len = camelCase.length
    let res = ''
    for (let i = 0 ; i <len ; i++){
        const s = camelCase[i]
        if (i > 0 && s.toUpperCase() === s){
            camelCaseArr.splice(i,1,`_${s.toLowerCase()}`)
        }
    }
    return camelCaseArr.join('')
}

function randomInt(min,max){
    const m = max - min + 1
    const res = min + Math.floor(Math.random()*m)
    return res
}

function formatDate(date) {
  let year = date.getFullYear();
  let month = String(date.getMonth() + 1).padStart(2, '0');
  let day = String(date.getDate()).padStart(2, '0');
  let hours = String(date.getHours()).padStart(2, '0');
  let minute = String(date.getMinutes()).padStart(2, '0');
  let seconds = String(date.getSeconds()).padStart(2, '0');

  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

function promisefy(fn){
    return function(...args){
        return new Promise((resolve,reject)=>{
            fn(...args,(err,res)=>{
                if(err){
                    reject(err)
                }else{
                    resolve(res)
                }
            })
        })
    }
}