使用多个关键字的 Jquery Grep 和 Map Json

标签 jquery json search filter

我想使用多个关键字过滤和搜索 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 部分,因为我看不出它有任何用处。然后你就剩下这个:

http://jsfiddle.net/kZWef/

关于使用多个关键字的 Jquery Grep 和 Map Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929630/

相关文章:

jquery - 使用 jQuery Waypoints 插件的粘性导航栏

jquery 检查鼠标是否在元素上

javascript - 如何添加从 JSON 文件中获取图像,添加类并追加到 div 中?

javascript - 无法调用未定义的 GetJson 的方法 'toLowerCase'

python - 在 python 中使用 sklearn 自己的估计器进行网格搜索 CV

javascript - 从数据库检索图像并显示,以及如何使该图像在窗口中弹出以获得清晰的可见性。

javascript - 选择字符串中第 n 个数字和第 n 个数字正则表达式之间的所有字符

json - 将 Json 解析为 UITableview

Android中的SQLite全文搜索unicode

string - 字符串处理算法