您的位置:首页 > Web前端 > JavaScript

关于 js 2个数组取差集怎么取

2016-07-22 14:06 645 查看

关于js2个数组取差集怎么取?

例如求vararr1=[1];vararr2=[1,2];的差集
方法一:


Array.prototype.diff=function(a){
returnthis.filter(function(i){returna.indexOf(i)<0;});
};
[1,2].diff([1]);//[2]


方法二:

varisNaN=Number.isNaN;
vardifference=function(arr1,arr2){
returnarr1.reduce(function(previous,i){
varfound=arr2.findIndex(function(j){
returnj===i||(isNaN(i)&&isNaN(j));
});
return(found<0&&previous.push(i),previous);
},[]);
};

vararr1=[1];
vararr2=[1,2];

console.log(difference(arr2,arr1));//[2]


方法三:

//ES6的Set来处理,这是真正按照数学上的集合来进行的,不会有重复元素
varsubSet=function(arr1,arr2){
varset1=newSet(arr1);
varset2=newSet(arr2);

varsubset=[];

for(letitemofset1){
if(!set2.has(item)){
subset.push(item);
}
}

returnsubset;
};
//普通方法
varsubSet=function(arr1,arr2){
varlen=arr1.length;
vararr=[];

while(len--){
if(arr2.indexOf(arr1[len])<0){
arr.push(arr1[len]);
}
}

returnarr;
};


方法四:

//数组求差值
vararr1=[1,2,4,9,0];
vararr2=[2,4,7,8];

vardifference=function(arr1,arr2){
vardiff=[];
vartmp=arr2;

arr1.forEach(function(val1,i){
if(arr2.indexOf(val1)<0){
diff.push(val1);
}else{
tmp.splice(tmp.indexOf(val1),1);
}
});

console.log(diff.concat(tmp));
}

//输出[1,9,0,7,8]
difference(arr1,arr2);



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: