打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
js取数组两个数组的交集|差集|并集|补集|去重
  1. /**  
  2. * each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数  
  3. * 这个迭代函数依次将集合的每一个元素和可选参数用函数进行计算,并将计算得的结果集返回  
  4. {%example  
  5. <script>  
  6.      var a = [1,2,3,4].each(function(x){return x > 2 ? x : null});  
  7.      var b = [1,2,3,4].each(function(x){return x < 0 ? x : null});  
  8.      alert(a);  
  9.      alert(b);  
  10. </script>  
  11. %}  
  12. * @param {Function} fn 进行迭代判定的函数  
  13. * @param more ... 零个或多个可选的用户自定义参数  
  14. * @returns {Array} 结果集,如果没有结果,返回空集  
  15. */  
  16. Array.prototype.each = function(fn){  
  17.     fn = fn || Function.K;  
  18.      var a = [];  
  19.      var args = Array.prototype.slice.call(arguments, 1);  
  20.      for(var i = 0; i < this.length; i++){  
  21.          var res = fn.apply(this,[this[i],i].concat(args));  
  22.          if(res != null) a.push(res);  
  23.      }  
  24.      return a;  
  25. };  
  26.   
  27. /**  
  28. * 得到一个数组不重复的元素集合<br/>  
  29. * 唯一化一个数组  
  30. * @returns {Array} 由不重复元素构成的数组  
  31. */  
  32. Array.prototype.uniquelize = function(){  
  33.      var ra = new Array();  
  34.      for(var i = 0; i < this.length; i ++){  
  35.          if(!ra.contains(this[i])){  
  36.             ra.push(this[i]);  
  37.          }  
  38.      }  
  39.      return ra;  
  40. };  
  41.   
  42. /**  
  43. * 求两个集合的补集  
  44. {%example  
  45. <script>  
  46.      var a = [1,2,3,4];  
  47.      var b = [3,4,5,6];  
  48.      alert(Array.complement(a,b));  
  49. </script>  
  50. %}  
  51. * @param {Array} a 集合A  
  52. * @param {Array} b 集合B  
  53. * @returns {Array} 两个集合的补集  
  54. */  
  55. Array.complement = function(a, b){  
  56.      return Array.minus(Array.union(a, b),Array.intersect(a, b));  
  57. };  
  58.   
  59. /**  
  60. * 求两个集合的交集  
  61. {%example  
  62. <script>  
  63.      var a = [1,2,3,4];  
  64.      var b = [3,4,5,6];  
  65.      alert(Array.intersect(a,b));  
  66. </script>  
  67. %}  
  68. * @param {Array} a 集合A  
  69. * @param {Array} b 集合B  
  70. * @returns {Array} 两个集合的交集  
  71. */  
  72. Array.intersect = function(a, b){  
  73.      return a.uniquelize().each(function(o){return b.contains(o) ? o : null});  
  74. };  
  75.   
  76. /**  
  77. * 求两个集合的差集  
  78. {%example  
  79. <script>  
  80.      var a = [1,2,3,4];  
  81.      var b = [3,4,5,6];  
  82.      alert(Array.minus(a,b));  
  83. </script>  
  84. %}  
  85. * @param {Array} a 集合A  
  86. * @param {Array} b 集合B  
  87. * @returns {Array} 两个集合的差集  
  88. */  
  89. Array.minus = function(a, b){  
  90.      return a.uniquelize().each(function(o){return b.contains(o) ? null : o});  
  91. };  
  92.   
  93. /**  
  94. * 求两个集合的并集  
  95. {%example  
  96. <script>  
  97.      var a = [1,2,3,4];  
  98.      var b = [3,4,5,6];  
  99.      alert(Array.union(a,b));  
  100. </script>  
  101. %}  
  102. * @param {Array} a 集合A  
  103. * @param {Array} b 集合B  
  104. * @returns {Array} 两个集合的并集  
  105. */  
  106. Array.union = function(a, b){  
  107.      return a.concat(b).uniquelize();  
  108. };  


  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
269个JavaScript工具函数,助你提升工作效率(下)
php – 模型参数设置最佳实践?
js中arguments的作用
js数组的五种迭代方法及两种归并方法
extjs4.0 Ext.Array 函数方法大全
JavaScript程序员都需要知道的4个数组方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服