Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Discord.js搜索关键术语_Javascript_Bots_Discord - Fatal编程技术网

Javascript Discord.js搜索关键术语

Javascript Discord.js搜索关键术语,javascript,bots,discord,Javascript,Bots,Discord,我正在尝试创建一个Discord机器人,用于在某些游戏中进行交易。到目前为止,我的大多数基本命令都能工作--!create在SQL数据库中创建交易清单!找到一个——但它只在同一个词上找到它。我想做的是让搜索变得不那么具体,这样搜索结果就不必完全相同。 我当前的代码非常复杂,不用说,非常复杂: var searchTerms = args[1].split(" "); var output = {}; for (var id in userData) { for (var offer in

我正在尝试创建一个Discord机器人,用于在某些游戏中进行交易。到目前为止,我的大多数基本命令都能工作--!create在SQL数据库中创建交易清单!找到一个——但它只在同一个词上找到它。我想做的是让搜索变得不那么具体,这样搜索结果就不必完全相同。 我当前的代码非常复杂,不用说,非常复杂:

var searchTerms = args[1].split(" ");
var output = {};
for (var id in userData) {
    for (var offer in userData[id].offers) {
        var score = 0;
        for (var key in searchTerms) {
            if (offer.includes(key)) {
                score ++;
            }
        }
        if (score >= searchTerms.length / 2) {
            output[id] = userData[id].offers[offer] + " - " + ((score / searchTerms.length) * 100) + "%";
        }
    }
}
if (output == {}) {
    bot.sendMessage({
        to: channelID,
        message: 'No matching offers found.'
    });
} else {
    msg = ""
    for (id in output) {
        msg += '<@' + id + '> - ' + output[id] + "   "
    }
    bot.sendMessage({
        to: channelID,
        message: Object.keys(output).length + ' offers found: ' + msg
    });
}
var searchTerms=args[1]。拆分(“”);
var输出={};
for(userData中的变量id){
for(userData[id].offers中的变量offer){
var得分=0;
for(搜索术语中的var键){
if(报价包括(关键)){
分数++;
}
}
如果(分数>=searchTerms.length/2){
输出[id]=userData[id]。提供[offer]+“-”+((score/searchTerms.length)*100)+“%”;
}
}
}
如果(输出=={}){
bot.sendMessage({
致:channelID,
消息:“未找到匹配的优惠。”
});
}否则{
msg=“”
用于(输出中的id){
msg+='-'+输出[id]+“”
}
bot.sendMessage({
致:channelID,
消息:Object.keys(output).length+'找到的报价:'+msg
});
}

我是Javascript新手,所以我真的不知道如何让它工作。任何提示都将不胜感激,谢谢

看起来您试图实现的是一种称为
模糊搜索的机制,用户可以使用键入或近似字符串找到类似的结果

(参考资料:)

对于编程初学者来说,单独实现这项功能并不容易,要么数据库必须支持某种模糊查询,要么您必须首先从数据库获取所有数据,然后使用JavaScript模糊搜索库来实现这一点

如果您仍然想这样做,我建议使用,它可以在几行内完成模糊搜索

//list to be searched
var books = [{
  'ISBN': 'A',
  'title': "Old Man's War",
  'author': 'John Scalzi'
}, {
  'ISBN': 'B',
  'title': 'The Lock Artist',
  'author': 'Steve Hamilton'
}]


模糊搜索是一个复杂的计算机科学问题,如果您想更多地了解它以及Fuse.js是如何实现的,这里有一些有用的链接

  • (由fuse.js使用)

那么在我的案例中应该如何实现这一点呢?我有一个用户ID的sql字典,然后每个ID都有一个属性数组——目前只有一个数组“offers”,其中包含一个offers列表。那么,我应该迭代每个用户的报价数组,然后用Fuse搜索吗?
// init the search
var options = {
  keys: ['title', 'author'],
  id: 'ISBN'
}
var fuse = new Fuse(books, options)

fuse.search('old')
// result
[
  "A"
]