diff --git a/arrayDistinct.js b/arrayDistinct.js new file mode 100644 index 0000000..267a528 --- /dev/null +++ b/arrayDistinct.js @@ -0,0 +1,19 @@ +/** + * @desc 数组去重 + * @param {Array} targetArray 需要去重的数组 + * @return distinct array + */ +function arrayDistinct(targetArray) { + if(!Array.isArray(targetArray)){ + return targetArray + } + if(targetArray.some((item)=> Object.is(typeof item,"object"))){ + return targetArray + .map((item) => JSON.stringify(item)) + .filter((item, idx, arry) => idx === arry.findIndex( (current)=> current === item)) + .map((item) => JSON.parse(item)) + } + return [...new Set(targetArray)] +} + +module.exports = arrayDistinct diff --git a/min/outils.min.js b/min/outils.min.js index 536f02d..a35c868 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()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t){function n(e,t){return new RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className)}e.exports=n},function(e,t){function n(e,t,n){var o=new Date;o.setDate(o.getDate()+n),document.cookie=e+"="+t+";expires="+o}e.exports=n},function(e,t){function n(){return document.documentElement&&document.documentElement.scrollTop||document.body.scrollTop}e.exports=n},function(e,t){function n(e){return window.scrollTo(0,e),e}e.exports=n},function(e,t){e.exports=function(e,t,n,o){function r(){function r(){a=Number(new Date),n.apply(f,s)}function u(){i=void 0}var f=this,c=Number(new Date)-a,s=arguments;o&&!i&&r(),i&&clearTimeout(i),void 0===o&&c>e?r():!0!==t&&(i=setTimeout(o?u:r,void 0===o?e-c:e))}var i,a=0;return"boolean"!=typeof t&&(o=n,n=t,t=void 0),r}},function(e,t,n){var o=n(6),r=n(7),i=n(0),a=n(8),u=n(9),f=n(10),c=n(1),s=n(11),p=n(12),d=n(2),l=n(13),m=n(14),v=n(3),w=n(15),g=n(16),y=n(4),h=n(17),x=n(18),b=n(19),C=n(20),N=n(21),S=n(22),M=n(23),E=n(24),F=n(25),D=n(26),I=n(27),T=n(28),k=n(29),R=n(30),A=n(31);e.exports={arrayEqual:o,addClass:r,hasClass:i,removeClass:a,getCookie:u,removeCookie:f,setCookie:c,getOS:s,getExplore:p,getScrollTop:d,offset:l,scrollTo:m,setScrollTop:v,windowResize:w,debounce:g,throttle:y,getKeyName:h,deepClone:x,isEmptyObject:b,randomColor:C,randomNum:N,isEmail:S,isIdCard:M,isPhoneNum:E,isUrl:F,digitUppercase:D,isSupportWebP:I,formatPassTime:T,formatRemainTime:k,parseQueryString:R,stringfyQueryString:A}},function(e,t){function n(e,t){if(e===t)return!0;if(e.length!=t.length)return!1;for(var n=0;nMath.abs(n))return void i(r()+n);i(r()+a),n>0&&r()>=e||n<0&&r()<=e||o(e,t-16)})}}var r=n(2),i=n(3);!function(){window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame}();e.exports=o},function(e,t){function n(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 u="",f=0;f0;f++)u=n[e%10]+o[1][f]+u,e=Math.floor(e/10);i=u.replace(/(零.)*零$/,"").replace(/^$/,"零")+o[0][a]+i}return r+i.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/^整$/,"零元整")}e.exports=n},function(e,t){function n(){return!![].map&&0==document.createElement("canvas").toDataURL("image/webp").indexOf("data:image/webp")}e.exports=n},function(e,t){function n(e){var t=Date.parse(new Date),n=t-e,o=parseInt(n/864e5),r=parseInt(n/36e5),i=parseInt(n/6e4),a=parseInt(o/30),u=parseInt(a/12);return u?u+"年前":a?a+"个月前":o?o+"天前":r?r+"小时前":i?i+"分钟前":"刚刚"}e.exports=n},function(e,t){function n(e){var t=new Date,n=new Date(e),o=n.getTime()-t.getTime(),r=0,i=0,a=0,u=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),u=Math.floor(o/1e3%60)),r+"天 "+i+"小时 "+a+"分钟 "+u+"秒"}e.exports=n},function(e,t){function n(e){e=null==e?window.location.href:e;var t=e.substring(e.lastIndexOf("?")+1);return t?JSON.parse('{"'+decodeURIComponent(t).replace(/"/g,'\\"').replace(/&/g,'","').replace(/=/g,'":"')+'"}'):{}}e.exports=n},function(e,t){function n(e){if(!e)return"";var t=[];for(var n in e){var o=e[n];if(o instanceof Array)for(var r=0;re?r():!0!==t&&(i=setTimeout(o?u:r,void 0===o?e-c:e))}var i,a=0;return"boolean"!=typeof t&&(o=n,n=t,t=void 0),r}},function(e,t,n){var o=n(6),r=n(7),i=n(8),a=n(0),u=n(9),f=n(10),c=n(11),s=n(1),p=n(12),l=n(13),d=n(2),m=n(14),y=n(15),v=n(3),g=n(16),w=n(17),h=n(4),x=n(18),b=n(19),S=n(20),N=n(21),C=n(22),A=n(23),M=n(24),D=n(25),E=n(26),F=n(27),I=n(28),O=n(29),T=n(30),k=n(31),R=n(32);e.exports={arrayEqual:o,arrayDistinct:r,addClass:i,hasClass:a,removeClass:u,getCookie:f,removeCookie:c,setCookie:s,getOS:p,getExplore:l,getScrollTop:d,offset:m,scrollTo:y,setScrollTop:v,windowResize:g,debounce:w,throttle:h,getKeyName:x,deepClone:b,isEmptyObject:S,randomColor:N,randomNum:C,isEmail:A,isIdCard:M,isPhoneNum:D,isUrl:E,digitUppercase:F,isSupportWebP:I,formatPassTime:O,formatRemainTime:T,parseQueryString:k,stringfyQueryString:R}},function(e,t){function n(e,t){if(e===t)return!0;if(e.length!=t.length)return!1;for(var n=0;nMath.abs(n))return void i(r()+n);i(r()+a),n>0&&r()>=e||n<0&&r()<=e||o(e,t-16)})}}var r=n(2),i=n(3);!function(){window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame}();e.exports=o},function(e,t){function n(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 u="",f=0;f0;f++)u=n[e%10]+o[1][f]+u,e=Math.floor(e/10);i=u.replace(/(零.)*零$/,"").replace(/^$/,"零")+o[0][a]+i}return r+i.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/^整$/,"零元整")}e.exports=n},function(e,t){function n(){return!![].map&&0==document.createElement("canvas").toDataURL("image/webp").indexOf("data:image/webp")}e.exports=n},function(e,t){function n(e){var t=Date.parse(new Date),n=t-e,o=parseInt(n/864e5),r=parseInt(n/36e5),i=parseInt(n/6e4),a=parseInt(o/30),u=parseInt(a/12);return u?u+"年前":a?a+"个月前":o?o+"天前":r?r+"小时前":i?i+"分钟前":"刚刚"}e.exports=n},function(e,t){function n(e){var t=new Date,n=new Date(e),o=n.getTime()-t.getTime(),r=0,i=0,a=0,u=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),u=Math.floor(o/1e3%60)),r+"天 "+i+"小时 "+a+"分钟 "+u+"秒"}e.exports=n},function(e,t){function n(e){e=null==e?window.location.href:e;var t=e.substring(e.lastIndexOf("?")+1);return t?JSON.parse('{"'+decodeURIComponent(t).replace(/"/g,'\\"').replace(/&/g,'","').replace(/=/g,'":"')+'"}'):{}}e.exports=n},function(e,t){function n(e){if(!e)return"";var t=[];for(var n in e){var o=e[n];if(o instanceof Array)for(var r=0;r Object.is(typeof item,"object"))){ + return targetArray + .map((item) => JSON.stringify(item)) + .filter((item, idx, arry) => idx === arry.findIndex( (current)=> current === item)) + .map((item) => JSON.parse(item)) + } + return [...new Set(targetArray)] +} + +module.exports = arrayDistinct diff --git a/src/index.js b/src/index.js index 64b2546..1a33652 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ * @desc webpack打包入口文件 */ const arrayEqual = require('./array/arrayEqual') +const arrayDistinct = require('./array/arrayDistinct') const addClass = require('./class/addClass') const hasClass = require('./class/hasClass') @@ -49,6 +50,7 @@ const stringfyQueryString = require('./url/stringfyQueryString') module.exports = { arrayEqual, + arrayDistinct, addClass, hasClass, diff --git a/test/array.test.js b/test/array.test.js index e41d974..ea91851 100644 --- a/test/array.test.js +++ b/test/array.test.js @@ -11,4 +11,43 @@ describe('Array API:', function () { assert(outils.arrayEqual(arr, arr)) }); }); + describe('#arrayDistinct()',()=>{ + const testDistinctArray = { + object:{ + init: [ + {id:1,name:"react"}, + {id:1,name:"react"}, + ['node'], + ['node'] + ], + result:[ + {id:1,name:"react"}, + ['node'], + ] + }, + stringOrNumber:{ + init:["1","1",2,2], + result:["1",2] + } + } + + it(`outils.arrayDistinct(${JSON.stringify(testDistinctArray.object.init,undefined,2)} should return + ${JSON.stringify(outils.arrayDistinct(testDistinctArray.object.result),undefined,2)})`,()=>{ + assert( + outils.arrayEqual( + testDistinctArray.object.result, + outils.arrayDistinct(testDistinctArray.object.init) + ) + ) + }) + it(`outils.arrayDistinct(${JSON.stringify(testDistinctArray.stringOrNumber.init,undefined,2)} should return + ${JSON.stringify(outils.arrayDistinct(testDistinctArray.stringOrNumber.result),undefined,2)})`,()=>{ + assert( + outils.arrayEqual( + testDistinctArray.stringOrNumber.result, + outils.arrayDistinct(testDistinctArray.stringOrNumber.init) + ) + ) + }) + }) }); \ No newline at end of file