利用技巧,挺高开发效率,用更少的时间,解决更多的业务问题
const createArray = (len)=>new Array(len).fill(0).map((v,i)=>i)
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
createArray(10)
const removeDuplicates = (arr)=>[...new Set(arr)]
// 结果是 [1, 2, 3, 4, 5]
removeDuplicates([1,1,2,2,2,3,3,4,4,5])
const getUnionSet = (...arr)=>arr.reduce((prev, cur)=>[...prev,...cur],[])
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
getUnionSet([1,2,3],[4,5,6],[7,8,9])
const getIntersection = (...arr)=>arr[0].filter((v,i)=>arr.every((item)=>item.includes(v)))
// [4, 5]
getIntersection([1,2,3,4,5],[4,5,6,7,9],[,4,5,7,8,9])
const getDifferenceSet = (arrA, arrB)=>arrA.filter((v,i)=>!arrB.includes(v))
// A和B 的差集,与B和A 的通常情况下是不一样的
// [1,2,3]
getDifferenceSet([1,2,3,4,5],[4,5,6,7,9])
// [6,7,9]
getDifferenceSet([4,5,6,7,9], [1,2,3,4,5])
const getRandomArr = (arr)=>arr.sort(()=>Math.random() - 0.5)
// 一个随机顺序的数组
getRandomArr([1,2,3,4,5,6,7,8,9])
const getIndexOfTheMax = (arr)=>arr.indexOf(Math.max(...arr))
// 8
getIndexOfTheMax([1,2,3,4,5,6,7,8,9])
const getIndexOfTheMin = (arr)=>arr.indexOf(Math.min(...arr))
// 0
getIndexOfTheMin ([1,2,3,4,5,6,7,8,9])
直接使用请数组并集的方法即可
// 找出第一个最接近的目标数字的值, 其实就是差值的绝对值最小的值
// 查找最接近target 的值
const getNearlyValue = (target, arr)=> arr.reduce((prev, cur)=>Math.abs(prev - target) > Math.abs(cur - target)? cur : prev)
// 7
getNearlyValue(8, [1,2,3,4,5,6,7])
/*const exchangeRowAndColumn = (arr)=>{
const target = [[],[],[]]
// 双层for循环法
for(let i = 0; i < arr.length; i++){
for(let j = 0; j < arr[i].length; j++){
target[i][j] = arr[j][i]
}
}
return target
}*/
// 上面的方法不够简洁,下面这方法也是嵌套遍历,但是写法更加简洁
const exchangeRowAndColumn = (arr)=>arr.map((v,i)=>arr.map((row)=>row[i]))
/**
[
[1, 1, 1]
[2, 2, 2]
[3, 3, 3]
]
*/
exchangeRowAndColumn([[1,2,3],[1,2,3],[1,2,3]])
const isEqual = (objA, objB)=>JSON.stringify(objA) === JSON.stringify(objB)
// true
isEqual({name: 'mm'}, {name: 'mm'})
// false
isEqual({name: 'mm'}, {name: 'rr'})
// true,但是这不符合我们的要求
isEqual({name: 'mm'}, {name: 'mm', aa:function(){}, age: undefined})
这个方法的主要是对比两个对象是否包含一样属性和值,但是需要注意的是假如对象内含有函数或者有属性值为undefined则不能这样比较,这方法只能比较简单的对象
// (newObj[key] = obj[key], newObj) 这里使用了逗号运算符 就是从左到右执行,最终取最后面那个值
const removeInvalidProperty = (obj)=>Object.keys(obj).reduce((newObj, key)=>!obj[key] ? newObj : (newObj[key] = obj[key], newObj),{})
// {name: 'mm'}
removeInvalidProperty({name: 'mm', age: undefined, hobby: null})
这可以应用在接口请求的请求参数,进行空值处理
const inverseFunc = (obj)=>Object.entries(obj).reduce((newObj, [key, value])=>(newObj[value]=key, newObj),{})
// {18: 'age', mm: 'name'}
inverseFunc({name: 'mm', age: 18})
十进制转其它进制
// padStart(8,0),就是补位的,如果不够八位就在前面补0 ,还有一个padEnd,在后面补位的也可以了解一下
const toNSystem = (num,n)=>num.toString(n).padStart(8,0)
// 转换成二进制 '00001010'
toNSystem(10, 2)
其他进制转十进制
// 其他进制转十进制
const toTenSystem = (num, n=10)=>parseInt(num,n)
// 二进制转十进制 5
toTenSystem(101,2)
// 八进制转十进制 65
toTenSystem(101,8)
// 十六进制转十进制 17
toTenSystem(11,16)
// 这是生成十六进制的颜色
const getHexRandomColor = ()=> `#${Math.floor(Math.random() * 16777215).toString(16)}`
// 每次执行的结果大概率是不一样的,'#b4bd36'
getRandomColor()
// 下面是rgb格式的
const getRgbRandomColor = ()=>`rgb(${Math.round(Math.random()*255)},${Math.round(Math.random()*255)},${Math.round(Math.random()*255)})`
// 每次执行的结果大概率是不一样的,'rgb(122,197,180)'
getRgbRandomColor()
const getRandomIp = ()=>[0,0,0,0].map(()=>Math.floor(Math.random() * 256)).join('.')
// 每次结果大概率是不一样的 '125.12.42.58'
getRandomIp()
上述方法,都是没有做兼容性的,如果要用到,需要结合自己的业务代码,做一定的兼容性