2014-06-05 104 views
2

这里有一点新的Underscore.js。我试图通过测试tags数组中的所有项目是否存在于对象的tags中来筛选对象数组。Underscore.js,测试整个阵列是否在另一个阵列中

所以这样的事情,使用下划线的filterevery方法:

/* the set of data */ 
var colors = [ 
    { 
    "id": "001", 
    "tags": ["color_family_white", "tone_warm", "room_study"] 
    }, 
    { 
    "id": "002", 
    "tags": ["color_family_white", "tone_neutral"] 
    }, 
    { 
    "id": "003", 
    "tags": ["color_family_red", "tone_bright", "room_kitchen"] 
    } 
]; 

/* an example of white I might want to filter on */ 
var tags = ["color_family_white", "room_study"]; 

var results = _.filter(colors, function (color) { 
    return _.every(tags, function() { /* ??? what to do here */}); 
}); 

所有标签应该出现在color.tags。所以这应该只返回色001

这说明大概是我想要做的事:http://jsfiddle.net/tsargent/EtuS7/5/

回答

3

使用indexOf将工作:

var results = _.filter(colors, function (color) { 
    return _.every(tags, function(tag) { return _.indexOf(color.tags, tag) > -1; }); 
}); 

或者内置indexOf功能:

var results = _.filter(colors, function (color) { 
    return _.every(tags, function(tag) { return color.tags.indexOf(tag) > -1; }); 
}); 

但是为了简洁起见,您还可以使用difference函数:

var results = _.filter(colors, function (color) { 
    return _.difference(tags, color.tags).length === 0; 
}); 

Demonstration

+0

惊人。谢谢! – Tyler