Underscore.js,测试整个数组是否在另一个数组中

时间:2014-06-05 16:52:14

标签: javascript underscore.js

这里的Underscore.js有点新鲜。我正在尝试通过测试tags数组中的所有项目是否都存在于对象的tags中来过滤对象数组。

所以这样,使用Underscore的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/

1 个答案:

答案 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;
});

Demonstration