【发布时间】:2016-10-04 18:58:18
【问题描述】:
我想过滤我的 json,并尝试使用通配符 -“%”模拟简单的 mysql 运算符“like”,但使用一个......某种“技巧”。
我们有一些项目:
var items =
[
{id: 1,name: "Breaking Bad"},
{id: 2,name : "Bates Motel"}
]
当我在 MySQL 中使用 PHP 时,我使用 '%' 替换用户输入中的每个空格。因此,当用户键入“b ba”时,查询如下所示:
$this->db->query("SELECT * FROM items WHERE name LIKE '%b%ba% ");
用户获得项目:“绝命毒师”。我想用 javascript 和 json 模拟相同的行为。
我最接近的实现如下:
this.search = function() {
var query = $.trim($('.player-search').val())
query = query.toUpperCase()
$.grep(that.items, function(v) {
if(that.filter(v.name,query) === true) {
$('.player-serial[data-id="'+v.id+'"]').fadeIn(200)
} else {
$('.player-serial[data-id="'+v.id+'"]').fadeOut(200)
}
})
}
this.filter = function(word,query) {
var tmp = query.toUpperCase().split(" "),
n = tmp.length,
i = 0
for(var k in tmp) {
word.toUpperCase().indexOf(tmp[k]) >= 0 && ++i
}
return (i == n) ? true : false
}
这种方式有一个可怕的错误,当用户键入“b ba”时,用户会得到“Breaking Bad”和“Bates Motel”,因为“Bates”这个词有“b”和“ba”。
在我尝试再次编写之前,我想问一下是否有更好/更智能的方法来根据需要过滤 json?可能是我在尝试再次发明轮子。
【问题讨论】:
-
也许是正则表达式?类似:/.*b.*ba.*/i
标签: javascript json filtering