javascript:检查字符串中包含哪个数组项

javascript:检查字符串中包含哪个数组项,javascript,arrays,string,Javascript,Arrays,String,我使用.some()和.includes()检查字符串是否包含数组中的一个或多个条目,如下所示 如果字符串包含数组中的一个或多个条目,我想知道是哪个条目。到目前为止,我还没有找到实现这一目标的方法 这是我的密码: var hobby = ["sport","art","music"]; var message = "I love sport!"; if(hobby.some(el => message.includes(el))){ console.log("a hobby is

我使用.some()和.includes()检查字符串是否包含数组中的一个或多个条目,如下所示

如果字符串包含数组中的一个或多个条目,我想知道是哪个条目。到目前为止,我还没有找到实现这一目标的方法

这是我的密码:

var hobby = ["sport","art","music"];
var message = "I love sport!";

if(hobby.some(el => message.includes(el))){
    console.log("a hobby is included");

     // tell me which hobby or hobbies here
}

使用
.filter
而不是
。一些

var hobby=[“运动”、“艺术”、“音乐”];
const checkMessage=(message)=>{
const嗜好=hobby.filter(word=>message.includes(word));
if(1.length!==0){
log('看起来你喜欢'+嗜好.加入(',');
}否则{
console.log(“未找到匹配的嗜好”);
}
};
检查消息(“我爱运动!”);
检查消息(“foo-bar”);
checkMessage(“音乐与艺术”)
可以使用
.filter()
方法代替
.some()
来获取包含在
消息
字符串中的项目列表。这反过来可以用来显示信息中的爱好

在将结果记录到控制台之前,逻辑将涉及额外的检查,以确保筛选列表的长度不为空:

var hobby=[“运动”、“艺术”、“音乐”];
var message=“我喜欢运动!”;
//使用.filter代替.some
var result=hobby.filter(el=>message.includes(el));
//如果结果不为空,则将结果记录到控制台
如果(result.length>0){
日志(“包括一个或多个爱好:”,结果);
//寻找匹配的标记
常数匹配项=爱好
.map((str,index)=>({str,index}))
.filter((item)=>message.includes(item.str))
.map((item)=>(item.str+'at index'+item.index));
console.log(“匹配标识:”,匹配标识)
//告诉我这里有哪些爱好

}
我更喜欢一个简单的
forEach
循环,如下所示:

var hobby=[“运动”、“艺术”、“音乐”];
var message=“我喜欢运动!”;
var idxs=[]
var VAL=[]
hobby.forEach(函数(val,idx){
if(消息包括(val))
{
idxs.push(idx);
val.push(val)
}
});
如果(vals.length!==0){
log('youlike'+vals.join(',');
log('您的爱好索引:'+idxs.join(',');
}否则{
log('你什么都不喜欢!!');

}
很有趣,谢谢!奇怪的是,有没有简单的方法从第一个数组中获取匹配单词的索引,而不是使用join()?例如,这里的“0”表示数组“hobby”中的sport?使用
。减少
,请参见编辑,尽管这很奇怪,但我更喜欢
。筛选