这里的Underscore.js有点新鲜。我正在尝试通过测试tags
数组中的所有项目是否都存在于对象的tags
中来过滤对象数组。
所以这样,使用Underscore的filter
和every
方法:
/* 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/
答案 0 :(得分: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;
});