使用$ .grep将数组数据与另一个数组匹配

时间:2012-01-16 01:49:38

标签: javascript jquery comparison

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

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的组合吗?也许不是吗?

1 个答案:

答案 0 :(得分: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/