/** * @param {Array} arr1 * @param {Array} arr2 * @description 得到两个数组的并集, 两个数组的元素为数值或字符串 */ export const getUnion = (arr1:Array, arr2:Array) => { return Array.from(new Set([...arr1, ...arr2])) } /** * @param {*} obj1 对象 * @param {*} obj2 对象 * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串 */ export const objEqual = (obj1 : any, obj2 : any) => { const keysArr1 = Object.keys(obj1) const keysArr2 = Object.keys(obj2) if (keysArr1.length !== keysArr2.length) return false else if (keysArr1.length === 0 && keysArr2.length === 0) return true /* eslint-disable-next-line */ else return !keysArr1.some(key => obj1[key] != obj2[key]) } export const forEach = (arr : Array, fn : Function) => { if (!arr.length || !fn) return let i = -1 let len = arr.length while (++i < len) { let item = arr[i] fn(item, i, arr) } } /** * @param {Array} target 目标数组 * @param {Array} arr 需要查询的数组 * @description 判断要查询的数组是否至少有一个元素包含在目标数组中 */ export const hasOneOf = (targetarr : Array, arr : Array) => { return targetarr.some(_ => arr.indexOf(_) > -1) } /** * @description 绑定事件 on(element, event, handler) */ export const on = (function () { if ((document as any).addEventListener) { return function (element : any, event : any, handler : any) { if (element && event && handler) { element.addEventListener(event, handler, false) } } } else { return function (element : any, event : any, handler : any) { if (element && event && handler) { element.attachEvent('on' + event, handler) } } } })() /** * @description 解绑事件 off(element, event, handler) */ export const off = (function () { if ((document as any).removeEventListener) { return function (element : any, event : any, handler : any) { if (element && event) { element.removeEventListener(event, handler, false) } } } else { return function (element : any, event : any, handler : any) { if (element && event) { element.detachEvent('on' + event, handler) } } } })()