gpt4 book ai didi

javascript - 过滤json类似mysql "like"操作符

转载 作者:行者123 更新时间:2023-11-30 16:01:40 28 4
gpt4 key购买 nike

我想过滤我的 json,我尝试使用通配符“%”模拟简单的 mysql 运算符“like”,但使用一个……某种“技巧”。

我们有一些元素:

var items =
[
{id: 1,name: "Breaking Bad"},
{id: 2,name : "Bates Motel"}
]

当我将 PHP 与 MySQL 结合使用时,我将用户输入中的每个空格替换为“%”。因此,当用户键入“b ba”时,查询如下所示:

$this->db->query("SELECT * FROM items WHERE name LIKE '%b%ba% ");

用户获得项目:“Breaking Bad”。我想用 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?可能是我要重新发明轮子吧。

最佳答案

你可以使用$.grep(), String.prototype.match(), Array.prototype.every(), String.prototype.slice()

var items = [{
id: 1,
name: "Breaking Bad"
}, {
id: 2,
name: "Bates Motel"
}];
var query = "b ba";
var res = $.grep(items, function(v) {
// if space character included in query match first word to
// first word of `v.name`, last word to last word in `v.name`
if (/\s/.test(query)) {
var curr = v.name.match(/\w+/g).map(function(_q) {
return _q.toLowerCase()
});
var q = query.match(/\w+/g);
if (q.every(function(val, index) {
return val === curr[index].slice(0, val.length)
})) return true
} else {
if (q.toLowerCase() === v.name.toLowerCase().slice(0, q.length)) {
return true
}
}
});

console.log(res[0])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>

关于javascript - 过滤json类似mysql "like"操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635900/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com