我想找到一个答案,通过审查用户的输入,并检查什么答案确实有最匹配的关键字。
我有一个对象数组。当用户提交表单时,我希望查看用户输入,并检查在用户输入中有最多标签的答案。
我不知道怎么开始。
有人知道我是如何在JS或jQuery中做到这一点的吗?
我需要找到答案,其中大多数关键字(标签)是在用户输入。
这是我现在的代码:
var objectArr = [{
"tags": ["windows", "3cx", "webclient", "hoe", "venster", "windows-venster"],
"answer": "Maak op je bureaublad een sneltoets aan en kies als doel:<br/>“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” –app=https://pbx000000.fluxcloud.eu:5001/webclient <br/>Hier verander je de 000000 in de link naar het juiste PBX-nummer wat er hoort."
},
{
"tags": ["swyx", "toestel", "opstarten", "blijft", "opnieuw", "mijn", "werkt niet"],
"answer": "Tijdens een software-update is de stroom mogelijk van het toestel af geweest. <br/> Je kan het toestel opsturen naar ons om de software te herstellen.<br/> De kosten van het herstellen van het toestel bedraagt €25,-"
},
{
"tags": ["toestel", "vast", "bellen", "kan niet", "werkt niet"],
"answer": "Zorg ervoor dat de telefonie-applicatie (SwyxIt!) is opgestart en dat jouw toestel is ingelogd op je eigen naam.<br/> Als dat het geval is, ga dan in SwyxIt! naar: Instellingen – CTI – CTI gebruiken – start koppelen."
},
{
"tags": ["client", "swyx", "inloggen", "kan niet", "werkt niet"],
"answer": "Controleer de tijd op de pc, deze mag niet meer dan 3 minuten afwijken van de tijd op de Swyxserver.<br/> Klopt de tijd op je pc, maar kun je nog steeds niet inloggen?<br/> Controleer dan je SwyxIt!-versie. Deze mag niet nieuwer zijn dan de OZMO cloud-omgeving."
},
{
"tags": ["beltoon", "geen", "swyx", "swyxphone", "mijn"],
"answer": "SwyxPhone L640 laat in het display een belsymbool zien waar een streep doorheen staat.<br/> De beltonen van het toestel zijn op dat moment uitgeschakeld.<br/> Door de <b>“*”</b> toets voor langere tijd in te drukken, kun je de beltonen weer activeren."
}
];
$("#submit").click(function(e) {
var input = $("#user_input").val();
// the part that searches in the object array for an answer by tags that are inside user input
var answer = "find in object";
/////////
$("#answer").html(answer);
});<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="user_input">
<button id="submit">Send</button>
<div id="answer">
</div>
我试过这个:
var answer = "";
for(var i=0;i<objectArr.length;i++){
for(var o=0;o<objectArr[i].tags.length;o+++){
if($("#user_input").val().includes(objectArr[i].tags[o])){
answer = objectArr[i]['answer'];
}
}
}
$("#answer").html(answer);但以这种方式,它只是查找一个关键字。
我想找到一个与关键字匹配最多的。
发布于 2019-09-19 12:06:16
你是说像这样的事
你可以数数结果来缩小范围。
var objectArr = [{ "tags": ["windows", "3cx", "webclient", "hoe", "venster", "windows-venster"], "answer": "Maak op je bureaublad een sneltoets aan en kies als doel:<br/>“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” –app=https://pbx000000.fluxcloud.eu:5001/webclient <br/>Hier verander je de 000000 in de link naar het juiste PBX-nummer wat er hoort." }, { "tags": ["swyx", "toestel", "opstarten", "blijft", "opnieuw", "mijn", "werkt niet"], "answer": "Tijdens een software-update is de stroom mogelijk van het toestel af geweest. <br/> Je kan het toestel opsturen naar ons om de software te herstellen.<br/> De kosten van het herstellen van het toestel bedraagt €25,-" }, { "tags": ["toestel", "vast", "bellen", "kan niet", "werkt niet"], "answer": "Zorg ervoor dat de telefonie-applicatie (SwyxIt!) is opgestart en dat jouw toestel is ingelogd op je eigen naam.<br/> Als dat het geval is, ga dan in SwyxIt! naar: Instellingen – CTI – CTI gebruiken – start koppelen." }, { "tags": ["client", "swyx", "inloggen", "kan niet", "werkt niet"], "answer": "Controleer de tijd op de pc, deze mag niet meer dan 3 minuten afwijken van de tijd op de Swyxserver.<br/> Klopt de tijd op je pc, maar kun je nog steeds niet inloggen?<br/> Controleer dan je SwyxIt!-versie. Deze mag niet nieuwer zijn dan de OZMO cloud-omgeving." }, { "tags": ["beltoon", "geen", "swyx", "swyxphone", "mijn"], "answer": "SwyxPhone L640 laat in het display een belsymbool zien waar een streep doorheen staat.<br/> De beltonen van het toestel zijn op dat moment uitgeschakeld.<br/> Door de <b>“*”</b> toets voor langere tijd in te drukken, kun je de beltonen weer activeren." } ];
const finder = function(search, target) { return search.map(function (val) { return target.filter(function (e) {return val === e;}).length;});}
$("form").on("submit", function(e) {
e.preventDefault();
$("#answer").empty();
const input = $("#user_input").val().toLowerCase().split(" ");
let answer = "Nothing found";
let most = 0;
objectArr.forEach(item => {
const count = finder(input,item.tags).reduce((a, b) => a + b, 0)
if (count > most) {
answer = item.answer
}
})
$("#answer").html(answer);
});
/* Just find any
var answers = objectArr.filter(item => {
return input.some(r => item.tags.includes(r))
})
*/<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input type="text" id="user_input" value="swyx toestel opstarten" />
<button id="send">Send</button>
</form>
<div id="answer">
</div>
https://stackoverflow.com/questions/58010311
复制相似问题