1、(不推荐)刚开始写的时候使用如下的函数
function arrayIntersection ( a, b ){ var ai=0, bi=0; var result = new Array(); while ( ai < a.length && bi < b.length ) { if ( a[ai] < b[bi] ) { ai++; } else if ( a[ai] > b[bi] ) { bi++; } else /* they're equal */ { result.push ( a[ai] ); ai++; bi++; } } return result;} //调用var $result = arrayIntersection (m,touResult);解释:这是网上找到的一段代码,可以找出一部分相同的元素,但不是所有的,其中的原因就在于里面的if判断过程中,会漏掉里面的相同的元素,比如说a数组里面的元素都比b数组里面的第一个元素小,那么这个循环就不会遍历到b数组,最终得到的相同元素就是null
2、因为马上放假,不愿意动脑,就上网又开始找到了一些代码,完美实现效果
Array.prototype.contains = function(obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false;} //array扩展出来的contains的方法,写上以后可以直接调用;Array.prototype.each = function(fn){ fn = fn || Function.K; var a = []; var args = Array.prototype.slice.call(arguments, 1); for(var i = 0; i < this.length; i++){ var res = fn.apply(this,[this[i],i].concat(args)); if(res != null) a.push(res); } return a;}; //array扩展出来的each方法Array.prototype.uniquelize = function(){ var ra = new Array(); for(var i = 0; i < this.length; i ++){ if(!ra.contains(this[i])){ ra.push(this[i]); } } return ra;}; //array扩展出来的uniquelize方法Array.intersect = function(a, b){ return a.uniquelize().each(function(o){return b.contains(o) ? o : null});}; //实现数组的交集用的时候可以如下:var $result = Array.intersect(touResult,m); 完美实现呀求补集的时候可以:
Array.complement = function(a, b){return Array.minus(Array.union(a, b),Array.intersect(a, b));}; 求差集的时候可以:Array.minus = function(a, b){return a.uniquelize().each(function(o){return b.contains(o) ? null : o});}; 求并集的时候可以:Array.union = function(a, b){return a.concat(b).uniquelize();};
十个赞