JS 陣列間的操作
阿新 • • 發佈:2018-11-15
JS 陣列間的操作(交集,並集、差集)
以下是js陣列之間常用的操作,如交集,並集、差集等。
迭代
each是一個集合迭代函式,可以將一個函式作為引數和一組可以選的引數。依次將集合的每一個元素和可選引數用函式進行計算。
/**fn 進行迭代判定的函式 *零個或多個可選的使用者自定義引數 */ Array.prototype.each = function(fn){ fn = fn || Functuon.K; var a = []; var args = Array.prototype.slice.call(arguments,10); for(var i=0;i<this.length;i++){ var res = fn.apply(this,this[i],i).concat(agrs); if(res != null) { a.push(res); } } }
Array.prototype.slice(arguments, 0); 這個寫法可以用於function() {} 內,這樣可以將函式的引數列表轉換成一個真正的陣列。
例:var a = [1,2,3,4].each(function(x){return x > 2 ? x : null});
唯一化陣列
/** 得到一個數組不重複的元素集合**/ 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.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();
}
補集
Array.complement = function(a,b){ return Array.minus(Array.union(a,b),Array.intersect(a,b)); }
交集
Array.intersect = function(a,b){
return a.uniquelize().each(function(o){
return b.contains(o)?0:null;
})
}