我正在玩数组试图更多地理解它们,因为我最近经常使用它们。我遇到了这种情况,我想搜索一个数组并将其元素值与另一个包含某些选定过滤器值的数组进行比较。
例如,如果我选择 3 个过滤器,我想稍后在新数组中写入匹配项 - 仅匹配所有 3 个过滤器的那些。
为了更容易理解,我在http://jsfiddle.net/easwee/x8U4v/36/上设置了一个示例
代码是:
var workItems = [
{ "id": 2616, "category": ".category-copy .category-beauty .category-fashion"}, //this is a match
{ "id": 1505, "category": ".category-beauty"}, // NOT
{ "id": 1500, "category": ".category-beauty .category-fashion"}, // NOT
{ "id": 692, "category": ".category-stills .category-retouching"}, // NOT
{ "id": 593, "category": ".category-beauty .category-capture .category-fashion .category-product .category-stills .category-stills-retouching "}, // NOT
{ "id": 636, "category": ".category-beauty .category-copy .category-fashion"}, //this is a match
{ "id": 547, "category": ".category-fashion .category-lifestyle .category-stills .category-stills-retouching "}, // NOT
{ "id": 588, "category": ".category-capture .category-recent-work .category-copy .category-beauty .category-fashion"} //this is a match
];
var filtersArray = [".category-beauty", ".category-fashion", ".category-copy"];
var i;
for (i = 0; i < filtersArray.length; ++i) {
var searchString = filtersArray[i];
console.log('Searching for: ' + searchString);
var filtered = $(workItems).filter(function(){
return this.category.indexOf(searchString);
});
}
console.log('Filtered results: ' + JSON.stringify(filtered, null, 4));
我也试过
filtered = $.grep(workItems, function(element, index){
return element.category.indexOf(filtersArray[i]);
}, true);
但它只匹配第一个过滤器,并且只有在它的开头workItems.category
我尝试了许多不同的解决方案,但无法真正做到这一点。我应该使用什么函数来返回所需的结果?