From c61b93b1828a8f74130db16a2d34c320905c21c5 Mon Sep 17 00:00:00 2001 From: jimmyxuexue <1002661758@qq.com> Date: Tue, 29 Nov 2022 17:44:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feature=20=E2=9C=A8=20add=20arrayInclude=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.d.ts | 595 ++++++++++++++++++++------------------ min/outils.min.js | 2 +- src/array/arrayInclude.js | 20 ++ test/array.test.js | 48 ++- 4 files changed, 360 insertions(+), 305 deletions(-) create mode 100644 src/array/arrayInclude.js diff --git a/index.d.ts b/index.d.ts index 8632aa0..8ee5ad4 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,116 +1,124 @@ - declare namespace outils { - /** - * - * @desc 判断两个数组是否相等 - * @param {Array} arr1 - * @param {Array} arr2 - * @return {Boolean} - */ - export function arrayEqual(arr1: Array, arr2: Array): boolean - - /** - * - * @desc 为元素添加class - * @param {HTMLElement} ele - * @param {String} cls - */ - export function addClass(ele: HTMLElement, cls: string): void - - /** - * - * @desc 判断元素是否有某个class - * @param {HTMLElement} ele - * @param {String} cls - * @return {Boolean} - */ - export function hasClass(ele: HTMLElement, cls: string): boolean - - /** - * - * @desc 为元素移除class - * @param {HTMLElement} ele - * @param {String} cls - */ - export function removeClass(ele: HTMLElement, cls: string): boolean - - /** - * - * @desc 根据name读取cookie - * @param {String} name - * @return {String} - */ - export function getCookie(name: string): string - - /** - * - * @desc 根据name删除cookie - * @param {String} name - */ - export function removeCookie(name: string): void - - /** - * - * @desc 设置Cookie - * @param {String} name - * @param {String} value - * @param {Number} days - */ - export function setCookie(name: string, value: string, days: number): void - - /** - * - * @desc 获取浏览器类型和版本 - * @return {String} - */ - export function getExplore(): string - - /** - * - * @desc 获取操作系统类型 - * @return {String} - */ - export function getOS(): void - - /** - * - * @desc 获取滚动条距顶部的距离 - */ - export function getScrollTop(): void - - /** - * - * @desc 获取一个元素的距离文档(document)的位置,类似jQ中的offset() - * @param {HTMLElement} ele - * @returns { {left: number, top: number} } - */ - export function offset(ele: HTMLElement): { left: number, top: number } - - /** - * - * @desc 在${duration}时间内,滚动条平滑滚动到${to}指定位置 - * @param {Number} to - * @param {Number} duration - */ - export function scrollTo(to: number, duration: number): void - - /** - * - * @desc 设置滚动条距顶部的距离 - * @param {Number} value - */ - export function setScrollTop(value: number): void - - /** - * - * @desc H5软键盘缩回、弹起回调 - * 当软件键盘弹起会改变当前 window.innerHeight,监听这个值变化 - * @param {Function} downCb 当软键盘弹起后,缩回的回调 - * @param {Function} upCb 当软键盘弹起的回调 - */ - export function windowResize(downCb: () => void, upCb: () => void): void - - /** + /** + * + * @desc 判断两个数组是否相等 + * @param {Array} arr1 + * @param {Array} arr2 + * @return {Boolean} + */ + export function arrayEqual(arr1: Array, arr2: Array): boolean + + /** + * + * @desc 判断数组1是否包含数组2 + * @param {Array} arr1 + * @param {Array} arr2 + * @return {Boolean} + */ + export function arrayInclude(arr1: Array, arr2: Array): boolean + + /** + * + * @desc 为元素添加class + * @param {HTMLElement} ele + * @param {String} cls + */ + export function addClass(ele: HTMLElement, cls: string): void + + /** + * + * @desc 判断元素是否有某个class + * @param {HTMLElement} ele + * @param {String} cls + * @return {Boolean} + */ + export function hasClass(ele: HTMLElement, cls: string): boolean + + /** + * + * @desc 为元素移除class + * @param {HTMLElement} ele + * @param {String} cls + */ + export function removeClass(ele: HTMLElement, cls: string): boolean + + /** + * + * @desc 根据name读取cookie + * @param {String} name + * @return {String} + */ + export function getCookie(name: string): string + + /** + * + * @desc 根据name删除cookie + * @param {String} name + */ + export function removeCookie(name: string): void + + /** + * + * @desc 设置Cookie + * @param {String} name + * @param {String} value + * @param {Number} days + */ + export function setCookie(name: string, value: string, days: number): void + + /** + * + * @desc 获取浏览器类型和版本 + * @return {String} + */ + export function getExplore(): string + + /** + * + * @desc 获取操作系统类型 + * @return {String} + */ + export function getOS(): void + + /** + * + * @desc 获取滚动条距顶部的距离 + */ + export function getScrollTop(): void + + /** + * + * @desc 获取一个元素的距离文档(document)的位置,类似jQ中的offset() + * @param {HTMLElement} ele + * @returns { {left: number, top: number} } + */ + export function offset(ele: HTMLElement): { left: number; top: number } + + /** + * + * @desc 在${duration}时间内,滚动条平滑滚动到${to}指定位置 + * @param {Number} to + * @param {Number} duration + */ + export function scrollTo(to: number, duration: number): void + + /** + * + * @desc 设置滚动条距顶部的距离 + * @param {Number} value + */ + export function setScrollTop(value: number): void + + /** + * + * @desc H5软键盘缩回、弹起回调 + * 当软件键盘弹起会改变当前 window.innerHeight,监听这个值变化 + * @param {Function} downCb 当软键盘弹起后,缩回的回调 + * @param {Function} upCb 当软键盘弹起的回调 + */ + export function windowResize(downCb: () => void, upCb: () => void): void + + /** * @desc 函数防抖 * 与throttle不同的是,debounce保证一个函数在多少毫秒内不再被触发,只会执行一次, * 要么在第一次调用return的防抖函数时执行,要么在延迟指定毫秒后调用。 @@ -124,183 +132,194 @@ declare namespace outils { * * @return {Function} 新的防抖函数。 */ - export function debounce(delay: number, atBegin?: boolean, callback?: () => void): void - - /** - * @desc 函数节流。 - * 适用于限制`resize`和`scroll`等函数的调用频率 - * - * @param {Number} delay 0 或者更大的毫秒数。 对于事件回调,大约100或250毫秒(或更高)的延迟是最有用的。 - * @param {Boolean} noTrailing 可选,默认为false。 - * 如果noTrailing为true,当节流函数被调用,每过`delay`毫秒`callback`也将执行一次。 - * 如果noTrailing为false或者未传入,`callback`将在最后一次调用节流函数后再执行一次. - * (延迟`delay`毫秒之后,节流函数没有被调用,内部计数器会复位) - * @param {Function} callback 延迟毫秒后执行的函数。`this`上下文和所有参数都是按原样传递的, - * 执行去节流功能时,调用`callback`。 - * @param {Boolean} debounceMode 如果`debounceMode`为true,`clear`在`delay`ms后执行。 - * 如果debounceMode是false,`callback`在`delay` ms之后执行。 - * - * @return {Function} 新的节流函数 - */ - export function throttle(delay: number, noTrailing?: boolean, callback?: () => void, debounceMode?: boolean): void - - /** - * @desc 根据keycode获得键名 - * @param {Number} keycode - * @return {String} - */ - export function getKeyName(keycode: number): string - - /** - * @desc 深拷贝,支持常见类型 - * @param {Any} values - * @return {Any} - */ - export function deepClone(values: any): any - - /** - * - * @desc 判断`obj`是否为空 - * @param {Object} obj - * @return {Boolean} - */ - export function isEmptyObject(obj: object): boolean - - /** - * - * @desc 随机生成颜色 - * @return {String} - */ - export function randomColor(): string - - /** - * - * @desc 生成指定范围[min, max]的随机数 - * @param {Number} min - * @param {Number} max - * @return {Number} - */ - export function randomNum(min: number, max: number): number - - /** - * - * @desc 判断是否为16进制颜色,rgb 或 rgba - * @param {String} str - * @return {Boolean} - */ - export function isColor(str: string): boolean - - /** - * - * @desc 判断是否为邮箱地址 - * @param {String} str - * @return {Boolean} - */ - export function isEmail(str: string): boolean - - /** - * - * @desc 判断是否为身份证号 - * @param {String|Number} str - * @return {Boolean} - */ - export function isIdCard(str: string | number): boolean - - /** - * - * @desc 判断是否为手机号 - * @param {String|Number} str - * @return {Boolean} - */ - export function isPhoneNum(str: string | number): boolean - - /** - * - * @desc 判断是否为URL地址 - * @param {String} str - * @return {Boolean} - */ - export function isUrl(str: string): boolean - - /** - * - * @desc 现金额转大写 - * @param {Number} n - * @return {String} - */ - export function digitUppercase(n: number): string - - /** - * - * @desc 判断浏览器是否支持webP格式图片 - * @return {Boolean} - */ - export function isSupportWebP(): boolean - - /** - * @desc 格式化${startTime}距现在的已过时间 - * @param {Date} startTime - * @return {String} - */ - export function formatPassTime(startTime: Date): string - - /** - * - * @desc 格式化现在距${endTime}的剩余时间 - * @param {Date} endTime - * @return {String} - */ - export function formatRemainTime(endTime: Date): string - - /** - * - * @desc 是否为闰年 - * @param {Number} year - * @returns {Boolean} - */ - export function isLeapYear(year: number): boolean - - /** - * @desc 判断是否为同一天 - * @param {Date} date1 - * @param {Date} date2 可选/默认值:当天 - * @return {Boolean} - */ - export function isSameDay(date1: Date, date2: Date): boolean - - /** - * @desc 获取指定日期月份的总天数 - * @param {Date} time - * @return {Number} - */ - export function monthDays(date: Date): number - - /** - * @desc ${startTime - endTime}的剩余时间,startTime大于endTime时,均返回0 - * @param { Date | String } startTime - * @param { Date | String } endTime - * @returns { Object } { d, h, m, s } 天 时 分 秒 - */ - export function timeLeft(startTime: Date | string, endTime: Date | string): { d: number, h: number, m: number, s: number } - - /** - * - * @desc url参数转对象 - * @param {String} url default: window.location.href - * @return {Object} - */ - export function parseQueryString(url?: URL): object - - /** - * - * @desc 对象序列化 - * @param {Object} obj - * @return {String} - */ - export function stringfyQueryString(obj: object): string + export function debounce( + delay: number, + atBegin?: boolean, + callback?: () => void + ): void + + /** + * @desc 函数节流。 + * 适用于限制`resize`和`scroll`等函数的调用频率 + * + * @param {Number} delay 0 或者更大的毫秒数。 对于事件回调,大约100或250毫秒(或更高)的延迟是最有用的。 + * @param {Boolean} noTrailing 可选,默认为false。 + * 如果noTrailing为true,当节流函数被调用,每过`delay`毫秒`callback`也将执行一次。 + * 如果noTrailing为false或者未传入,`callback`将在最后一次调用节流函数后再执行一次. + * (延迟`delay`毫秒之后,节流函数没有被调用,内部计数器会复位) + * @param {Function} callback 延迟毫秒后执行的函数。`this`上下文和所有参数都是按原样传递的, + * 执行去节流功能时,调用`callback`。 + * @param {Boolean} debounceMode 如果`debounceMode`为true,`clear`在`delay`ms后执行。 + * 如果debounceMode是false,`callback`在`delay` ms之后执行。 + * + * @return {Function} 新的节流函数 + */ + export function throttle( + delay: number, + noTrailing?: boolean, + callback?: () => void, + debounceMode?: boolean + ): void + + /** + * @desc 根据keycode获得键名 + * @param {Number} keycode + * @return {String} + */ + export function getKeyName(keycode: number): string + + /** + * @desc 深拷贝,支持常见类型 + * @param {Any} values + * @return {Any} + */ + export function deepClone(values: any): any + + /** + * + * @desc 判断`obj`是否为空 + * @param {Object} obj + * @return {Boolean} + */ + export function isEmptyObject(obj: object): boolean + + /** + * + * @desc 随机生成颜色 + * @return {String} + */ + export function randomColor(): string + + /** + * + * @desc 生成指定范围[min, max]的随机数 + * @param {Number} min + * @param {Number} max + * @return {Number} + */ + export function randomNum(min: number, max: number): number + + /** + * + * @desc 判断是否为16进制颜色,rgb 或 rgba + * @param {String} str + * @return {Boolean} + */ + export function isColor(str: string): boolean + + /** + * + * @desc 判断是否为邮箱地址 + * @param {String} str + * @return {Boolean} + */ + export function isEmail(str: string): boolean + + /** + * + * @desc 判断是否为身份证号 + * @param {String|Number} str + * @return {Boolean} + */ + export function isIdCard(str: string | number): boolean + + /** + * + * @desc 判断是否为手机号 + * @param {String|Number} str + * @return {Boolean} + */ + export function isPhoneNum(str: string | number): boolean + + /** + * + * @desc 判断是否为URL地址 + * @param {String} str + * @return {Boolean} + */ + export function isUrl(str: string): boolean + + /** + * + * @desc 现金额转大写 + * @param {Number} n + * @return {String} + */ + export function digitUppercase(n: number): string + + /** + * + * @desc 判断浏览器是否支持webP格式图片 + * @return {Boolean} + */ + export function isSupportWebP(): boolean + + /** + * @desc 格式化${startTime}距现在的已过时间 + * @param {Date} startTime + * @return {String} + */ + export function formatPassTime(startTime: Date): string + + /** + * + * @desc 格式化现在距${endTime}的剩余时间 + * @param {Date} endTime + * @return {String} + */ + export function formatRemainTime(endTime: Date): string + + /** + * + * @desc 是否为闰年 + * @param {Number} year + * @returns {Boolean} + */ + export function isLeapYear(year: number): boolean + + /** + * @desc 判断是否为同一天 + * @param {Date} date1 + * @param {Date} date2 可选/默认值:当天 + * @return {Boolean} + */ + export function isSameDay(date1: Date, date2: Date): boolean + + /** + * @desc 获取指定日期月份的总天数 + * @param {Date} time + * @return {Number} + */ + export function monthDays(date: Date): number + + /** + * @desc ${startTime - endTime}的剩余时间,startTime大于endTime时,均返回0 + * @param { Date | String } startTime + * @param { Date | String } endTime + * @returns { Object } { d, h, m, s } 天 时 分 秒 + */ + export function timeLeft( + startTime: Date | string, + endTime: Date | string + ): { d: number; h: number; m: number; s: number } + + /** + * + * @desc url参数转对象 + * @param {String} url default: window.location.href + * @return {Object} + */ + export function parseQueryString(url?: URL): object + /** + * + * @desc 对象序列化 + * @param {Object} obj + * @return {String} + */ + export function stringfyQueryString(obj: object): string } -declare module "outils" { - export = outils +declare module 'outils' { + export = outils } diff --git a/min/outils.min.js b/min/outils.min.js index 3bbd444..96529ff 100644 --- a/min/outils.min.js +++ b/min/outils.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.outils=t():e.outils=t()}(window,function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t){e.exports=function(e,t){return new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className)}},function(e,t){e.exports=function(e,t,n){var o=new Date;o.setDate(o.getDate()+n),document.cookie=e+"="+t+";expires="+o}},function(e,t){e.exports=function(){return document.documentElement&&document.documentElement.scrollTop||document.body.scrollTop}},function(e,t){e.exports=function(e){return window.scrollTo(0,e),e}},function(e,t){e.exports=function(e,t,n,o){var r,i=0;return"boolean"!=typeof t&&(o=n,n=t,t=void 0),function(){var a=this,s=Number(new Date)-i,u=arguments;function f(){i=Number(new Date),n.apply(a,u)}o&&!r&&f(),r&&clearTimeout(r),void 0===o&&s>e?f():!0!==t&&(r=setTimeout(o?function(){r=void 0}:f,void 0===o?e-s:e))}}},function(e,t,n){var o={},r=n(6);r.keys().forEach(function(e){var t=e.substring(e.lastIndexOf("/")+1,e.lastIndexOf("."));o[t]=r(e)}),e.exports=o},function(e,t,n){var o={"./array/arrayEqual.js":7,"./class/addClass.js":8,"./class/hasClass.js":0,"./class/removeClass.js":9,"./cookie/getCookie.js":10,"./cookie/removeCookie.js":11,"./cookie/setCookie.js":1,"./device/getExplore.js":12,"./device/getOS.js":13,"./dom/getScrollTop.js":2,"./dom/offset.js":14,"./dom/scrollTo.js":15,"./dom/setScrollTop.js":3,"./dom/windowResize.js":16,"./function/debounce.js":17,"./function/throttle.js":4,"./keycode/getKeyName.js":18,"./object/deepClone.js":19,"./object/isEmptyObject.js":20,"./random/randomColor.js":21,"./random/randomNum.js":22,"./regexp/isColor.js":23,"./regexp/isEmail.js":24,"./regexp/isIdCard.js":25,"./regexp/isPhoneNum.js":26,"./regexp/isUrl.js":27,"./string/digitUppercase.js":28,"./support/isSupportWebP.js":29,"./time/formatPassTime.js":30,"./time/formatRemainTime.js":31,"./time/isLeapYear.js":32,"./time/isSameDay.js":33,"./time/monthDays.js":34,"./time/timeLeft.js":35,"./url/parseQueryString.js":36,"./url/stringfyQueryString.js":37};function r(e){var t=i(e);return n(t)}function i(e){var t=o[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=6},function(e,t){e.exports=function(e,t){if(e===t)return!0;if(e.length!=t.length)return!1;for(var n=0;nMath.abs(a)?r(o()+a):(r(o()+s),a>0&&o()>=t||a<0&&o()<=t||e(t,n-16))})}}}},function(e,t){e.exports=function(e,t){var n=window.innerHeight;e="function"==typeof e?e:function(){},t="function"==typeof t?t:function(){},window.addEventListener("resize",function(){var o=window.innerHeight;o===n&&e(),o0;a++){for(var s="",u=0;u0;u++)s=n[e%10]+o[1][u]+s,e=Math.floor(e/10);i=s.replace(/(零.)*零$/,"").replace(/^$/,"零")+o[0][a]+i}return r+i.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/^整$/,"零元整")}},function(e,t){e.exports=function(){return!![].map&&0==document.createElement("canvas").toDataURL("image/webp").indexOf("data:image/webp")}},function(e,t){e.exports=function(e){var t=Date.parse(new Date)-e,n=parseInt(t/864e5),o=parseInt(t/36e5),r=parseInt(t/6e4),i=parseInt(n/30),a=parseInt(i/12);return a?a+"年前":i?i+"个月前":n?n+"天前":o?o+"小时前":r?r+"分钟前":"刚刚"}},function(e,t){e.exports=function(e){var t=new Date,n=new Date(e).getTime()-t.getTime(),o=0,r=0,i=0,a=0;return n>=0&&(o=Math.floor(n/1e3/3600/24),r=Math.floor(n/1e3/60/60%24),i=Math.floor(n/1e3/60%60),a=Math.floor(n/1e3%60)),o+"天 "+r+"小时 "+i+"分钟 "+a+"秒"}},function(e,t){e.exports=function(e){return 0==e%4&&(e%100!=0||e%400==0)}},function(e,t){e.exports=function(e,t){t||(t=new Date);var n=e.getFullYear(),o=e.getMonth()+1,r=e.getDate(),i=t.getFullYear(),a=t.getMonth()+1;return r===t.getDate()&&o===a&&n===i}},function(e,t){e.exports=function(e){var t=(e=new Date(e)).getFullYear(),n=e.getMonth()+1;return new Date(t,n,0).getDate()}},function(e,t){e.exports=function(e,t){if(e&&t){var n;n=e instanceof Date?e:new Date(e.replace(/-/g,"/"));var o=(t instanceof Date?t:new Date(t.replace(/-/g,"/"))).getTime()-n.getTime(),r=0,i=0,a=0,s=0;return o>=0&&(r=Math.floor(o/1e3/3600/24),i=Math.floor(o/1e3/60/60%24),a=Math.floor(o/1e3/60%60),s=Math.floor(o/1e3%60)),{d:r,h:i,m:a,s:s}}}},function(e,t){e.exports=function(e){if(-1===(e=e||window.location.href).indexOf("?"))return{};var t="?"===e[0]?e.substr(1):e.substring(e.lastIndexOf("?")+1);if(""===t)return{};t=t.split("&");for(var n={},o=0;oe?f():!0!==t&&(r=setTimeout(o?function(){r=void 0}:f,void 0===o?e-s:e))}}},function(e,t,n){var o={},r=n(6);r.keys().forEach(function(e){var t=e.substring(e.lastIndexOf("/")+1,e.lastIndexOf("."));o[t]=r(e)}),e.exports=o},function(e,t,n){var o={"./array/arrayEqual.js":7,"./array/arrayInclude.js":8,"./class/addClass.js":9,"./class/hasClass.js":0,"./class/removeClass.js":10,"./cookie/getCookie.js":11,"./cookie/removeCookie.js":12,"./cookie/setCookie.js":1,"./device/getExplore.js":13,"./device/getOS.js":14,"./dom/getScrollTop.js":2,"./dom/offset.js":15,"./dom/scrollTo.js":16,"./dom/setScrollTop.js":3,"./dom/windowResize.js":17,"./function/debounce.js":18,"./function/throttle.js":4,"./keycode/getKeyName.js":19,"./object/deepClone.js":20,"./object/isEmptyObject.js":21,"./random/randomColor.js":22,"./random/randomNum.js":23,"./regexp/isColor.js":24,"./regexp/isEmail.js":25,"./regexp/isIdCard.js":26,"./regexp/isPhoneNum.js":27,"./regexp/isUrl.js":28,"./string/digitUppercase.js":29,"./support/isSupportWebP.js":30,"./time/formatPassTime.js":31,"./time/formatRemainTime.js":32,"./time/isLeapYear.js":33,"./time/isSameDay.js":34,"./time/monthDays.js":35,"./time/timeLeft.js":36,"./url/parseQueryString.js":37,"./url/stringfyQueryString.js":38};function r(e){var t=i(e);return n(t)}function i(e){var t=o[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=6},function(e,t){e.exports=function(e,t){if(e===t)return!0;if(e.length!=t.length)return!1;for(var n=0;nMath.abs(a)?r(o()+a):(r(o()+s),a>0&&o()>=t||a<0&&o()<=t||e(t,n-16))})}}}},function(e,t){e.exports=function(e,t){var n=window.innerHeight;e="function"==typeof e?e:function(){},t="function"==typeof t?t:function(){},window.addEventListener("resize",function(){var o=window.innerHeight;o===n&&e(),o0;a++){for(var s="",u=0;u0;u++)s=n[e%10]+o[1][u]+s,e=Math.floor(e/10);i=s.replace(/(零.)*零$/,"").replace(/^$/,"零")+o[0][a]+i}return r+i.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/^整$/,"零元整")}},function(e,t){e.exports=function(){return!![].map&&0==document.createElement("canvas").toDataURL("image/webp").indexOf("data:image/webp")}},function(e,t){e.exports=function(e){var t=Date.parse(new Date)-e,n=parseInt(t/864e5),o=parseInt(t/36e5),r=parseInt(t/6e4),i=parseInt(n/30),a=parseInt(i/12);return a?a+"年前":i?i+"个月前":n?n+"天前":o?o+"小时前":r?r+"分钟前":"刚刚"}},function(e,t){e.exports=function(e){var t=new Date,n=new Date(e).getTime()-t.getTime(),o=0,r=0,i=0,a=0;return n>=0&&(o=Math.floor(n/1e3/3600/24),r=Math.floor(n/1e3/60/60%24),i=Math.floor(n/1e3/60%60),a=Math.floor(n/1e3%60)),o+"天 "+r+"小时 "+i+"分钟 "+a+"秒"}},function(e,t){e.exports=function(e){return 0==e%4&&(e%100!=0||e%400==0)}},function(e,t){e.exports=function(e,t){t||(t=new Date);var n=e.getFullYear(),o=e.getMonth()+1,r=e.getDate(),i=t.getFullYear(),a=t.getMonth()+1;return r===t.getDate()&&o===a&&n===i}},function(e,t){e.exports=function(e){var t=(e=new Date(e)).getFullYear(),n=e.getMonth()+1;return new Date(t,n,0).getDate()}},function(e,t){e.exports=function(e,t){if(e&&t){var n;n=e instanceof Date?e:new Date(e.replace(/-/g,"/"));var o=(t instanceof Date?t:new Date(t.replace(/-/g,"/"))).getTime()-n.getTime(),r=0,i=0,a=0,s=0;return o>=0&&(r=Math.floor(o/1e3/3600/24),i=Math.floor(o/1e3/60/60%24),a=Math.floor(o/1e3/60%60),s=Math.floor(o/1e3%60)),{d:r,h:i,m:a,s:s}}}},function(e,t){e.exports=function(e){if(-1===(e=e||window.location.href).indexOf("?"))return{};var t="?"===e[0]?e.substr(1):e.substring(e.lastIndexOf("?")+1);if(""===t)return{};t=t.split("&");for(var n={},o=0;o { + return !arr1.includes(item) + }) +} + +console.log(arrayInclude([0, 2, 3, 4], [1, 2, 3])) + +module.exports = arrayInclude diff --git a/test/array.test.js b/test/array.test.js index 0197a56..0230c3e 100644 --- a/test/array.test.js +++ b/test/array.test.js @@ -1,17 +1,33 @@ describe('Array API:', function () { - describe('#arrayEqual()', function () { - it(`outils.arrayEqual([0, 2, 3, 4], [1, 2, 3]) should return false`, function () { - assert.notEqual(outils.arrayEqual([0, 2, 3, 4], [1, 2, 3]), true) - }); - it(`outils.arrayEqual([0, 2, 3], [1, 2, 3]) should return false`, function () { - assert.notEqual(outils.arrayEqual([0, 2, 3], [1, 2, 3]), true) - }); - it('outils.arrayEqual([1, 2, 3], [1, 2, 3]) should return true', function () { - assert(outils.arrayEqual([1, 2, 3], [1, 2, 3])) - }); - const arr = [8, 2, 3, 4, 7, 8] - it(`outils.arrayEqual([${arr},${arr}]) should return true`, function () { - assert(outils.arrayEqual(arr, arr)) - }); - }); -}); \ No newline at end of file + describe('#arrayEqual()', function () { + it(`outils.arrayEqual([0, 2, 3, 4], [1, 2, 3]) should return false`, function () { + assert.notEqual(outils.arrayEqual([0, 2, 3, 4], [1, 2, 3]), true) + }) + it(`outils.arrayEqual([0, 2, 3], [1, 2, 3]) should return false`, function () { + assert.notEqual(outils.arrayEqual([0, 2, 3], [1, 2, 3]), true) + }) + it('outils.arrayEqual([1, 2, 3], [1, 2, 3]) should return true', function () { + assert(outils.arrayEqual([1, 2, 3], [1, 2, 3])) + }) + const arr = [8, 2, 3, 4, 7, 8] + it(`outils.arrayEqual([${arr},${arr}]) should return true`, function () { + assert(outils.arrayEqual(arr, arr)) + }) + }) + + describe('#arrayInclude()', function () { + it('outils.arrayInclude([0,2,3,4],[1,2,3]) should return false', function () { + assert.notEqual(outils.arrayInclude([0, 2, 3, 4], [1, 2, 3]), true) + }) + it('outils.arrayInclude([0,2,3,4],[-1,0,2,3,4]) should return false', function () { + assert.notEqual(outils.arrayInclude([0, 2, 3, 4], [-1, 0, 2, 3, 4]), true) + }) + it('outils.arrayInclude([0,2,3,4],[2,3,4]) should return true', function () { + assert(outils.arrayInclude([0, 2, 3, 4], [2, 3, 4]), true) + }) + const arr = [8, 2, 3, 4, 7, 8] + it(`outils.arrayInclude(${arr},${arr}) should return true`, function () { + assert(outils.arrayInclude(arr, arr), true) + }) + }) +}) From f2f077ae709d64fee80fa138c8a1885da0aef730 Mon Sep 17 00:00:00 2001 From: jimmyxuexue <1002661758@qq.com> Date: Tue, 29 Nov 2022 17:47:15 +0800 Subject: [PATCH 2/2] :fire: remove other code --- src/array/arrayInclude.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/array/arrayInclude.js b/src/array/arrayInclude.js index 091dc06..e429adc 100644 --- a/src/array/arrayInclude.js +++ b/src/array/arrayInclude.js @@ -15,6 +15,4 @@ function arrayInclude(arr1, arr2) { }) } -console.log(arrayInclude([0, 2, 3, 4], [1, 2, 3])) - module.exports = arrayInclude