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. };  
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8 中可以使用 Stream API 来实现集合之间的交集并集差集去重并集。 假设有两个 List 集合:list1 和 list2,分别包含一些元素,代码如下: ```java List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); ``` 下面分别介绍如何实现集合之间的操作。 1. 交集 交集即获两个集合中共同拥有的元素。可以使用 Stream API 的 `filter()` 方法和 `contains()` 方法实现。代码如下: ```java List<Integer> intersection = list1.stream() .filter(list2::contains) .collect(Collectors.toList()); System.out.println("交集:" + intersection); // 输出 [4, 5] ``` 2. 并集 并集即获两个集合中所有的元素,但是去重。可以使用 Stream API 的 `distinct()` 方法和 `concat()` 方法实现。代码如下: ```java List<Integer> union = Stream.concat(list1.stream(), list2.stream()) .distinct() .collect(Collectors.toList()); System.out.println("并集:" + union); // 输出 [1, 2, 3, 4, 5, 6, 7, 8] ``` 3. 差集 差集即获两个集合中不同的元素。可以使用 Stream API 的 `filter()` 方法和 `!contains()` 方法实现。代码如下: ```java List<Integer> diff1 = list1.stream() .filter(e -> !list2.contains(e)) .collect(Collectors.toList()); System.out.println("差集1:" + diff1); // 输出 [1, 2, 3] List<Integer> diff2 = list2.stream() .filter(e -> !list1.contains(e)) .collect(Collectors.toList()); System.out.println("差集2:" + diff2); // 输出 [6, 7, 8] ``` 4. 去重并集 去重并集即获两个集合中所有的元素,并且去重。可以使用 Stream API 的 `distinct()` 方法和 `flatMap()` 方法实现。代码如下: ```java List<Integer> distinctUnion = Stream.of(list1, list2) .flatMap(List::stream) .distinct() .collect(Collectors.toList()); System.out.println("去重并集:" + distinctUnion); // 输出 [1, 2, 3, 4, 5, 6, 7, 8] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值