项目中使用的一些js工具函数
数组并集
let getUnion = (arr1,arr2) => {
return Array.from(new Set([...arr1,...arr2]))
}
判断两个对象是否相等
let fn = (obj1,obj2) => {
// Object.keys() 获取对象中的键并放到一个数组里
let keyArr1 = Object.keys(obj1)
let keyArr2 = Object.keys(obj2)
if (keyArr1.length != keyArr2.length) {
return false
}else if (keyArr1.length === 0 && keyArr2.length === 0) {
return true
}else {
// arr.some() 检测数组中是否有满足条件的元素
return !keyArr1.some(key => obj1[key] != obj2[key])
}
}
判断对象是否为空
// 法一: JSON.stringfy()
let isEmptyObj = obj => {
// 空数组转成json字符后就是'{}'
if (JSON.stringify(obj) === '{}') return true
return false
}
// 法二: for...in
let isEmptyObj = obj => {
// 对象有键则进入for循环
for (key in obj) {
return false
}
return true
}
// 法三: Object.keys()
let isEmptyObj = obj => {
return !(Object.keys(obj).length > 0)
}
生成一周时间
function getWeekTime(){
return [...new Array(7)].map((j,i)=> new Date(Date.now()+i*8.64e7).toLocaleDateString())
}
Promise对象的简单使用
// pro().then()
let pro = (asyncFn) => new Promise((reslove, reject) => {
asyncFn && asyncFn(reslove)
})
pro((next) => {
// 异步操作一
setTimeout(() => {
console.log(1)
next()
}, 2000)
}).then(() => {
// 异步操作二
setTimeout(() => {
console.log(2)
}, 2000)
})
// 睡眠函数
let sleep = (timer = 500) => new Promise((reslove, reject) => {
setTimeout(() => { reslove() }, timer)
})
sleep(1000).then(() => { console.log(12313) })
使用字面量对象精简判断
// 多个if
function test(color) {
switch (color) {
case 'red':
return ['apple', 'strawberry'];
case 'yellow':
return ['banana', 'pineapple'];
case 'purple':
return ['grape', 'plum'];
default:
return [];
}
}
test(null); // []
test('yellow'); // ['banana', 'pineapple']
// 精简后
const fruitColor = {
red: ['apple', 'strawberry'],
yellow: ['banana', 'pineapple'],
purple: ['grape', 'plum']
};
function test(color) {
return fruitColor[color] || [];
}