下划线如何过滤对象保持2方法的条件?

时间:2014-01-27 05:13:17

标签: underscore.js

我有2个对象数组。我只想使用第一个数组值过滤第二个数组,约束是

a)第一个数组的部分'section'和'/' - 第二个数组中不允许的值。

如何遍历其中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 个答案:

答案 0 :(得分:1)

您可以将array1映射到id值,然后过滤,如下所示:

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/