使用string-similarity匹配宝可梦名称时报参数错误如何解决
问题原因
- 第一个参数类型错误:
stringSimilarity.findBestMatch第一个入参要求是单个字符串,你传入的args是split方法切割后得到的数组,类型不匹配。 - 第二个参数类型错误:你在数组文件中通过
exports.pokemons导出数组,主文件直接require得到的是包含pokemons属性的导出对象,不是数组本身,不符合「第二个参数为字符串数组」的要求。 - 额外注意:如果数组文件里的
example1等内容没有加引号,会被识别为变量而非字符串,也会触发数组元素类型不符合的报错。
修复方案
第一步:修正导入逻辑和入参取值
主文件调整为以下代码:
const args = message.content.slice(prefix.length).trim().split(/ +/); const stringSimilarity = require("string-similarity"); // 解构导出对象,直接拿到宝可梦数组 const { pokemons } = require('../../arrays/pokemons.js') // 取指令后用户输入的宝可梦名称作为匹配目标,按需调整索引即可 const inputPokemonName = args[1] const poss = stringSimilarity.findBestMatch(inputPokemonName, pokemons) console.log(poss.bestMatch.target)
第二步:确认数组文件内容格式
数组文件里的宝可梦名称需要用引号包裹为字符串格式,示例如下:
exports.pokemons = [ '妙蛙种子', '皮卡丘', '喷火龙', // 其他宝可梦名称 ]
内容的提问来源于stack exchange,提问作者Dancing Potato
相关产品推荐
相关产品推荐

