2012-08-25 16 views
-1

如何獲得Javascript中兩個關聯數組的差異。 例如:JavaScript中關聯數組上的數學集函數

var arr1[0] = { name : 'test1' , type : 'test2' }; 
var arr1[1] = { name : 'test2' , type : 'test3' }; 
var arr2[0] = { name : 'test1' , type : 'test2' }; 
var arr2[1] = { name : 'test3' , type : 'test4' }; 

我需要輸出這樣

if Intersection() : 
arr3[0] = { name : 'test1' , type : 'test2' } 
if difference arr1-arr2 : 
arr4[0] = { name : 'test2' , type : 'test3' }; 
if difference arr2-arr1 : 
arr5[0] = { name : 'test3' , type : 'test4' }; 

我沒有找到屬於我的搜索關聯數組什麼。

回答

0
function equals(a, b){ 
     return (a.name === b.name && a.type === b.type);    
    } 

    function has(arr, obj){ 
     var len = arr.length; 

     for(var i = 0; i < arr.length; i++){ 
      if(equals(arr[i], obj)) return true;        
     } 

     return false;   
    }  

    function clone(obj){ 
     return { 
      name: obj.name, 
      type: obj.type 
     };   
    } 


    function intersect(a, b){ 
     var common = [];  
     if(!a.length || !b.length) return common; 

     var aLen = a.length; 
     for(var i = 0; i < aLen; i++){ 
      if(has(b, a[i])){ 
       common.push(clone(a[i])); 
      }    
     } 

     return common;    
    } 




    function subtract(a, b){ 
     var result = [];  
     if(!a.length || !b.length) return result; 

     var common = intersect(a, b); 
     var aLen = a.length; 

     for(var i = 0; i < aLen; i++){ 
      if(!has(common, a[i])){ 
       result.push(clone(a[i])); 
      }    
     } 

     return result; 
    } 

    var arr1 = [{ name : 'test1' , type : 'test2' },{ name : 'test2' , type : 'test3' }]; 

    var arr2 = [{ name : 'test1' , type : 'test2' }, { name : 'test3' , type : 'test4' }]; 

    console.log(intersect(arr1, arr2)); 
    console.log(subtract(arr1, arr2)); 
    console.log(subtract(arr2, arr1));