2014-06-19 147 views
0

我試圖從對象中刪除obects,如果它們出現在其他對象中。真的很難exaplin!這是一個例子。我有2個包含DOM圖像對象的對象,如果它們出現在第二個對象中,我想從第一個對象中刪除DOM圖像對象。從基於重複的對象中刪除jQuery對象

的第一個對象

{ 
    "241": [{ 
     "img": image_object_1 
    }, 
    { 
     "img": image_object_2 
    }, 
    { 
     "img": image_object_3 
    }, 
    { 
     "img": image_object_4 
    }] 
} 

二對象

{ 
    "241": [{ 
     "img": image_object_1 
    }, 
    { 
     "img": image_object_3 
    }, 
    { 
     "img": image_object_4 
    }] 
} 
對象的

預期成果1

{ 
    "241": [{ 
     "img": image_object_2 
    }] 
} 

我有一個對象都像這樣,但我很高興地改變格式如果需要的話

{ 
    "0": { 

    }, 
    "1": { 
     "241.14999389648438": [{ 
      "img": { 
       image_object_1 
      }, 
     }, 
     { 
      "img": { 
       image_object_2 
      }, 
     }, 
     { 
      "img": { 
       image_object_3 
      }, 
     }, 
     { 
      "img": { 
       image_object_4 
      }, 
     }] 
    }, 
    "2": { 
     "241.14999389648438": [{ 
      "img": { 
       image_object_2 
      }, 
     }, 
     { 
      "img": { 
       image_object_3 
      }, 
     }, 
     { 
      "img": { 
       image_object_4 
      }, 
     }] 
    } 
} 

我的工作代碼是在這裏

jQuery.fn.reverse = [].reverse; 

function same_height(){ 
    var imob = {}; 
    var groups = []; 
    var heights = []; 
    var tp = 0; 
    var img = false; 
    $("#ez-container .row").each(function(gi){ 
     imob = {}; 
     groups[gi] = {}; 
     heights[gi] = {}; 
     tp = 0; 
     img = false; 
     $(this).find(".ez-image img").each(function(){ 
      img = $(this); 
      tp = img.offset().top; 

      imob = { 
       "img":img, 
       "padding":img.outerHeight(true) - (parseInt(img.css('borderBottomWidth'))+parseInt(img.css('borderTopWidth'))) - img.innerHeight() 
      }; 
      if(typeof(groups[gi][tp])=="undefined"){ 
       groups[gi][tp] = []; 
       heights[gi][tp] = []; 
      } 
      groups[gi][tp].push(imob); 
      heights[gi][tp].push(img.height()); 
     }); 
    }); 
    heights.reverse(); 
    var max_group_height = 0; 
    $.each(groups.reverse(),function(gix,grp){ 
     $.each(grp,function(t,im){ 
      if(im.length>1){ 
       $.each(im,function(i,v){ 
        max_group_height = Math.max.apply(Math, heights[gix][t]); 
        if(typeof(v.img.attr("data-fixed"))=="undefined"){ 
         v.img.css({"height":max_group_height+(v.padding)+"px"}).attr("data-height",0).attr("data-width",0).attr("data-fixed",1); 
        } 
       }); 
      } 
     }); 
    }); 
    do_swap_images(); 
} 
+0

檢查:http://stackoverflow.com/questions/1187518/ javascript-array-difference –

+0

我可以輕鬆地使用數組來完成它,但對象不一樣。 –

+0

看着你的對象的結構,它看起來可以簡化很多。例如,爲什麼用一個鍵保存一個對象數組(而值是圖像)?您可以直接擁有一組圖像節點。另外,這個'{'0':{...},'1':{...}}'看起來非常像設置遞增索引,並且可以使用數組。這將使得迭代值更容易。 – christian314159

回答

0

,如果你檢查DOM節點的圖像,你需要isSameNode功能。我不知道您的要求,下面的代碼會盼望能給

//suppose a, b are your objects 

var key = 241 
var diff = a[key].filter(function(v){ 
    var firstImgNode = v.img; 
    return !b[key].some(function(v){ 
     return v.img.isSameNode(firstImgNode ); 
    }); 
}); 

,或者如果你檢查其他數據類型,然後簡單地做v.img == firstImgNode