標籤:

js取數組兩個數組的交集|差集|並集|補集|去重

[html] view plain copy

  1. /**
  2. *each是一個集合迭代函數,它接受一個函數作為參數和一組可選的參數
  3. *這個迭代函數依次將集合的每一個元素和可選參數用函數進行計算,並將計算得的結果集返回
  4. {%example
  5. <script>
  6. vara=[1,2,3,4].each(function(x){returnx>2?x:null});
  7. varb=[1,2,3,4].each(function(x){returnx<0?x:null});
  8. alert(a);
  9. alert(b);
  10. </script>
  11. %}
  12. *@param{Function}fn進行迭代判定的函數
  13. *@parammore...零個或多個可選的用戶自定義參數
  14. *@returns{Array}結果集,如果沒有結果,返回空集
  15. */
  16. Array.prototype.each=function(fn){
  17. fn=fn||Function.K;
  18. vara=[];
  19. varargs=Array.prototype.slice.call(arguments,1);
  20. for(vari=0;i<this.length;i++){
  21. varres=fn.apply(this,[this[i],i].concat(args));
  22. if(res!=null)a.push(res);
  23. }
  24. returna;
  25. };
  26. /**
  27. *得到一個數組不重複的元素集合<br/>
  28. *唯一化一個數組
  29. *@returns{Array}由不重複元素構成的數組
  30. */
  31. Array.prototype.uniquelize=function(){
  32. varra=newArray();
  33. for(vari=0;i<this.length;i++){
  34. if(!ra.contains(this[i])){
  35. ra.push(this[i]);
  36. }
  37. }
  38. returnra;
  39. };
  40. /**
  41. *求兩個集合的補集
  42. {%example
  43. <script>
  44. vara=[1,2,3,4];
  45. varb=[3,4,5,6];
  46. alert(Array.complement(a,b));
  47. </script>
  48. %}
  49. *@param{Array}a集合A
  50. *@param{Array}b集合B
  51. *@returns{Array}兩個集合的補集
  52. */
  53. Array.complement=function(a,b){
  54. returnArray.minus(Array.union(a,b),Array.intersect(a,b));
  55. };
  56. /**
  57. *求兩個集合的交集
  58. {%example
  59. <script>
  60. vara=[1,2,3,4];
  61. varb=[3,4,5,6];
  62. alert(Array.intersect(a,b));
  63. </script>
  64. %}
  65. *@param{Array}a集合A
  66. *@param{Array}b集合B
  67. *@returns{Array}兩個集合的交集
  68. */
  69. Array.intersect=function(a,b){
  70. returna.uniquelize().each(function(o){returnb.contains(o)?o:null});
  71. };
  72. /**
  73. *求兩個集合的差集
  74. {%example
  75. <script>
  76. vara=[1,2,3,4];
  77. varb=[3,4,5,6];
  78. alert(Array.minus(a,b));
  79. </script>
  80. %}
  81. *@param{Array}a集合A
  82. *@param{Array}b集合B
  83. *@returns{Array}兩個集合的差集
  84. */
  85. Array.minus=function(a,b){
  86. returna.uniquelize().each(function(o){returnb.contains(o)?null:o});
  87. };
  88. /**
  89. *求兩個集合的並集
  90. {%example
  91. <script>
  92. vara=[1,2,3,4];
  93. varb=[3,4,5,6];
  94. alert(Array.union(a,b));
  95. </script>
  96. %}
  97. *@param{Array}a集合A
  98. *@param{Array}b集合B
  99. *@returns{Array}兩個集合的並集
  100. */
  101. Array.union=function(a,b){
  102. returna.concat(b).uniquelize();
  103. };

推薦閱讀:

數組公式入門——開開啟函數公式的新大門
數組,鏈表,二叉樹,這些是為了解決什麼問題而出現的呢?
4分鐘寫完C語言動態數組
Pandas Series用if判斷缺損值並修改,不影響原有空間
從兩列中提取相同或不相同數據的數組公式

TAG:數組 |