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();
};