2014-01-27 62 views
0

我有2個對象數組。我只想要使用所述第一陣列值來過濾第二陣列,所述約束是,下劃線如何過濾對象保持2方式的條件?

一個)第一陣列的部分「部分」和「/」 - 在第二陣列不允許的值。

如何通過這些陣列的2環和過濾所需對象爲一個數組。這裏是我的嘗試:

var array1 = [ 
    { 
     "part" : "section", 
     "id" : "3", 
    }, 
    { 
     "part" : "page", 
     "id" : "1" 
    }, 
    { 
     "part": "/", 
     "id" : "4" 
    }, 
    { 
     "part": "/", 
     "id" : "5" 
    }, 
    { 
     "part": "/", 
     "id" : "6" 
    } 
]; 


var array2 = [ 
    { 
     "name" : "dog", 
     "value" : "3" 
    }, 
    { 
     "name" : "rabbit", 
     "value": "1", //it is allowed, since it's not fall under 'section' or '/' 
    }, 
    { 
     "name" : "rose", 
     "value": "4" 
    }, 
    { 
     "name" : "lilly", 
     "value": "5" 
    }, 
    { 
     "name" : "egle", 
     "value": "6" 
    }, 
    { 
     "name" : "horse", 
     "value": "7" 
    }, 
    { 
     "name" : "cat", 
     "value": "8" 
    } 
] 

_.each(array1, function(item){ 
    var fitered = _.filter(array2, function(fltItm){ 
     return fltItm.value !== item.part('page').id || fltItm.value !== item.value; 
    }) 
}) 

但我沒有得到正確的結果。我的結果應該是:

var array2 = [ 

    { 
     "name" : "rabbit", 
     "value": "1", 
    }, 
    { 
     "name" : "horse", 
     "value": "7" 
    }, 
    { 
     "name" : "cat", 
     "value": "8" 
    } 
] 

如何做到這一點?任何人都會給我最好的建議嗎?

Demo

回答

1

您可以通過id值映射array1,然後過濾,像這樣:

var map = {}, filtered; 

_.each(array1, function (item) { 
    map[item.id] = item.part; 
}) 

filtered = _.filter(array2, function (item) { 
    var part = map[item.value]; 

    return part !== '/' && part !== 'section'; 
}) 

http://jsfiddle.net/yJWvZ/1/