我想使用多个关键字过滤和搜索 Json。当只有一个值需要检查时,我可以使用它,但我需要使用多个关键字搜索过滤器。
在此示例中,我想返回与沃尔玛和中国相关的对象,但不返回与美国的沃尔玛或中国的 Target 相关的对象。
我创建了一个关键字数组来使用 Grep() 进行过滤,并将其映射到控制台中。但是,我无法弄清楚根据关键字检查值的语法(请参阅下面的评论,“这是不对的。”)
<!DOCTYPE html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script>
var keywords = ["China", "Wal-Mart"];//filter Json by these terms
var data = [
{
"name": "Store #1",
"country": "China",
"retailer": "Wal-Mart"
},
{
"name": "New Store #2",
"country": "China",
"retailer": "Wal-Mart"
},
{
"name": "Store Name US",
"country": "United States",
"retailer": "Wal-Mart"
},
{
"name": "Target #98237",
"country": "China",
"retailer": "Target"
}
]
var searchkeywords = $.grep(data, function(value,i) {
return value[i] === keywords[i];//<--- This is not right
//should be the equivalent of above keywords:
//return value.country.toLowerCase() === "china" && value.retailer.toLowerCase() === "wal-mart"
});
var keywordsearchresult = $.map(searchkeywords, function(value, i) {
return {
name: value.name,
country: value.country,
retailer: value.retailer
};
});
console.log(keywordsearchresult);//should return first 2 items
</script>
</head>
<body>
</body>
</html>
在我的应用程序中,Json 中会有更多关键字和项目(类型、日期等),这只是一个简化版本。我基本上想给 Grep 添加很多规则和条件。
最佳答案
我认为您的主要问题是您的搜索词没有表明它们应该过滤哪个字段。我会将您的条款格式更改为:
var keywords = [
{
field: "country",
value: "China"
},
{
field: "retailer",
value: "Wal-Mart"
}
];
这允许您搜索每个单词的适当字段。然后你可以将 grep 更改为:
var results = $.grep(data, function(value, i) {
for(var i=0;i<keywords.length;i++){
if(value[keywords[i].field] !== keywords[i].value){
return false
}
}
return true;
});
我已经删除了 map
部分,因为我看不出它有任何用处。然后你就剩下这个:
关于使用多个关键字的 Jquery Grep 和 Map Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929630/