我有一个输入域,我希望用户键入的文本,其中包含许多关键字之一,将触发不同的音频文件取决于关键字。(我知道从UX的角度来看,这并不是很聪明,但这只是一个虚拟助手的样机/演示)。
我正在使用这个代码,但我觉得我可以做得更好,你能推荐一些替代方案吗?
keyword1 = "music";
keyword2 = "news";
keyword3 = "weather";
keyword4 = "cooking";
keyword5 = "pasta";
keyword6 = "tech";
if(text.search(keyword1)!=-1) {
audio.src = a_music;
audio.play();
} else if(text.search(keyword2)!=-1){
audio.src = a_news;
audio.play();
}
[...]
}发布于 2017-10-24 23:24:27
您可以创建一个关键字为key、文件url为value的对象,然后遍历关键字以检查文本是否与关键字匹配。
const config = {
'music': 'musicUrl',
'news': 'newsUrl',
'weather': 'weatherUrl',
'cooking': 'cookingUrl',
'pasta': 'pastaUrl',
'tech': 'techUrl'
};
function match(input, obj) {
var matched = Object.keys(obj).find(key => input.toLowerCase().search(key) > -1);
return obj[matched] || null;
}
console.log(match('cats weather dogs', config));
console.log(match('cats tech dogs', config));
console.log(match('cats dogs', config));
发布于 2017-10-24 23:20:40
您应该使用关键字数组,而不是每个单词一个不同的变量。那就是小菜一碟了:
const keywords = ["music","news","weather","cooking","pasta","tech"]
const text = "let's play some music"
if( keywords.some(keyword => text.includes(keyword) )) {
console.log("Found")
// audio.src = a_music;
// audio.play();
}
发布于 2017-10-24 23:21:45
也许是一个数组?
var array = ["music", "news", "weather", "cooking", "pasta", "tech"];
for(var i = 0; i < array.length; i++){
if(text.includes(array[i])){
//do something with i
break;
}
}https://stackoverflow.com/questions/46914159
复制相似问题