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)
}
})
})
}
}