JavaScript实现查找含指定字母的数组元素函数(discord.js场景)
数组指定字母筛选实现方案(适配discord.js)
采用JS原生简单语法,新手可直接复制复用,无复杂依赖
核心逻辑说明
实现的find函数完全匹配你提到的两个测试场景:
- 函数支持传入任意数量的目标字母,筛选规则为数组元素包含全部传入的目标字母时,才会被纳入结果
- 调用
find("h", "n", "e")时,只有phone同时包含三个传入字母,匹配后返回,完全符合你写的预期输出 - 调用
find("e")时,super和phone都包含字母e,wood因为没有e会被自动排除,刚好满足你提到的匹配super/phone、排除wood的筛选要求
完整可运行代码
// 定义待筛选的源数组 const array1 = ["super", "phone", "wood"]; // 定义支持多字母参数传入的find函数 function find(...targetLetters) { // 遍历源数组执行筛选 return array1.filter(item => { // 检查当前元素是否包含所有传入的目标字母 return targetLetters.every(letter => item.includes(letter)); }); } // 测试1:传入h、n、e,预期返回["phone"] const results = find("h", "n", "e"); // 发送到discord频道的逻辑,和你原有调用习惯完全匹配 message.channel.send( results.length ? results.join("\n") : "没有找到符合匹配规则的元素" );
注:上面的发送逻辑需要写在discord.js的消息事件回调内部,不需要改动你原有的交互结构
代码逐行解释(新手友好)
- 函数参数的
...targetLetters是JS原生的可变参数写法,不管给find传1个还是10个目标字母,都会自动把所有参数收集成数组,不用手动处理参数长度 array.filter()是数组自带的筛选方法,会把满足回调条件的元素拼成新数组返回,不需要手动写循环遍历targetLetters.every()的作用是挨个检查每个传入的目标字母,是否都能在当前数组元素中找到,只要有一个字母找不到,这个元素就会被排除
可调整的匹配规则
如果后续需要修改匹配逻辑,只要替换对应的数组方法即可:
- 要改成「只要包含任意一个传入字母就算匹配」,把
every换成some即可 - 要实现不区分大小写匹配,把检查行的逻辑改成:
return targetLetters.every(letter => item.toLowerCase().includes(letter.toLowerCase()));
内容的提问来源于stack exchange,提问作者Hytherist
相关产品推荐
相关产品推荐

