• 【JS】两个数组的交集、差集、并集、补集、去重


     1 /**  
     2 * 得到一个数组不重复的元素集合<br/>  
     3 * 唯一化一个数组  
     4 * @returns {Array} 由不重复元素构成的数组  
     5 */  
     6 Array.prototype.uniquelize = function(){  
     7      var ra = new Array();  
     8      for(var i = 0; i < this.length; i ++){  
     9          if(!ra.contains(this[i])){  
    10             ra.push(this[i]);  
    11          }  
    12      }  
    13      return ra;  
    14 };
    15 
    16 /**  
    17 * each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数  
    18 * 这个迭代函数依次将集合的每一个元素和可选参数用函数进行计算,并将计算得的结果集返回   
    19 * @param {Function} fn 进行迭代判定的函数  
    20 * @param more ... 零个或多个可选的用户自定义参数  
    21 * @returns {Array} 结果集,如果没有结果,返回空集  
    22 */  
    23 Array.prototype.each = function(fn){  
    24     fn = fn || Function.K;  
    25      var a = [];  
    26      var args = Array.prototype.slice.call(arguments, 1);  
    27      for(var i = 0; i < this.length; i++){  
    28          var res = fn.apply(this,[this[i],i].concat(args));  
    29          if(res != null) a.push(res);  
    30      }  
    31      return a;  
    32 }; 
    33 
    34 /**
    35  * 两个集合的差集
    36 * @param {Array} a 集合A  
    37 * @param {Array} b 集合B  
    38 * @returns {Array} 两个集合的差集  
    39 */  
    40 Array.minus = function(a, b){  
    41      return a.uniquelize().each(function(o){return b.contains(o) ? null : o});  
    42 };
    43 
    44 /**  
    45 * 求两个集合的并集   
    46 * @param {Array} a 集合A  
    47 * @param {Array} b 集合B  
    48 * @returns {Array} 两个集合的并集  
    49 */  
    50 Array.union = function(a, b){  
    51      return a.concat(b).uniquelize();  
    52 }; 
    53 
    54 /**  
    55 * 求两个集合的差集  
    56 * @param {Array} a 集合A  
    57 * @param {Array} b 集合B  
    58 * @returns {Array} 两个集合的差集  
    59 */  
    60 Array.minus = function(a, b){  
    61      return a.uniquelize().each(function(o){return b.contains(o) ? null : o});  
    62 }; 
    63 
    64 /**  
    65 * 求两个集合的交集   
    66 * @param {Array} a 集合A  
    67 * @param {Array} b 集合B  
    68 * @returns {Array} 两个集合的交集  
    69 */  
    70 Array.intersect = function(a, b){  
    71      return a.uniquelize().each(function(o){return b.contains(o) ? o : null});  
    72 }; 
    73 
    74 /**  
    75 * 求两个集合的补集   
    76 * @param {Array} a 集合A  
    77 * @param {Array} b 集合B  
    78 * @returns {Array} 两个集合的补集  
    79 */  
    80 Array.complement = function(a, b){  
    81      return Array.minus(Array.union(a, b),Array.intersect(a, b));  
    82 };
    83 
    84 /**
    85  * Array扩展包含函数
    86  */
    87 Array.prototype.contains = function (obj) {  
    88     var i = this.length;  
    89     while (i--) {  
    90         if (this[i] === obj) {  
    91             return true;  
    92         }  
    93     }  
    94     return false;  
    95 }  
  • 相关阅读:
    pytorch 文本输入处理
    理解 on-policy 和 off-policy
    Monte Carlo与TD算法
    Monte Calro Tree Search (MCTS)
    强化学习概览
    linux 服务器 keras 深度学习环境搭建
    sed和awk学习整理
    linux shell编程进阶学习(转)
    gdb调试:
    MySQL C API 访问 MySQL 示例
  • 原文地址:https://www.cnblogs.com/flydkPocketMagic/p/7646348.html
Copyright © 2020-2023  润新知