2012-01-16 69 views
2

尝试查看一个数组中的数据是否与另一个数组中的数据匹配。我有对象的数组,像这样 -

var ProductsList = 
[ 
{"Name": "Product A"; "Rating": "3"}, 
{"Name": "Product B"; "Rating": "2"}, 
{"Name": "Product C"; "Rating": "1"}, 
]; 

然后我想比较用户选择的值,它进来,我得到基础上,他们通过复选框选择的值的数组这款产品列表。因此,如果他们选择了1,2,3 - 应显示所有产品,如果他们选择1 - 则仅显示产品A.

我试图使用$ .grep做过滤,但我遇到了通过数组值过滤的问题。作为一个例子,我们将用户过滤器硬编码为所有值。

userFilterArray.Rating = [1, 2, 3]; 

function filter(ProductsList, userFilterArray) 
filteredList = $.grep(ProductList, function(n) { 
    return (n.Rating == userFilterArray.Rating); 
}); 

显然,这并不工作,因为我比较n.Rating这是一个字符串数组,但我不知道如何串在这种情况下比较字符串。

grep会是最简单的方法吗?我应该使用.each .each组合吗?也许都不是?

回答

3

一堆语法和其他修复之后,我觉得这是你以后:

var ProductsList = [ 
    {"Name": "Product A", "Rating": 3}, 
    {"Name": "Product B", "Rating": 2}, 
    {"Name": "Product C", "Rating": 1} 
]; 

var userFilterArray = [1, 3]; 

function filter(list, filterArr) { 
    return $.grep(list, function(obj) { 
     return $.inArray(obj.Rating, filterArr) !== -1; 
    }); 
} 

var filteredList = filter(ProductsList, userFilterArray) 

console.log(filteredList); 

DEMO:http://jsfiddle.net/vK6N9/

相关问题