1. 程式人生 > >JS 陣列間的操作

JS 陣列間的操作

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