Javascript js-输出最匹配的列表
我是JS新手,需要一些帮助。 在这个例子中:我有一个列表,在这个列表中有一个数组中的“关键字” 我找到了一些链接,但我现在不知道如何将其放入我的脚本中 ->所以我想,当我搜索[“苹果”,“草莓”]时,脚本输出最匹配的列表 这是我的主意,我尝试了很多东西。。但没有一件事像我想象的那样成功Javascript js-输出最匹配的列表,javascript,arrays,filter,Javascript,Arrays,Filter,我是JS新手,需要一些帮助。 在这个例子中:我有一个列表,在这个列表中有一个数组中的“关键字” 我找到了一些链接,但我现在不知道如何将其放入我的脚本中 ->所以我想,当我搜索[“苹果”,“草莓”]时,脚本输出最匹配的列表 这是我的主意,我尝试了很多东西。。但没有一件事像我想象的那样成功 var groups = [ {name: 'fruits', words:["apple","strawberry", "banana"]}, {name: 'test', words:[
var groups = [
{name: 'fruits', words:["apple","strawberry", "banana"]},
{name: 'test', words:["asd","qwe"]}
];
var searchwords = ["apple", "strawberry"];
for(i = 0; i < groups.length; i++) {
console.log(groups[i]);
for(i = 0; i < searchwords.length; i++) {
console.log(searchwords[i]);
console.log('The most matching list is: ' + groups.name);
}
}
变量组=[
{名称:'水果',单词:[“苹果”、“草莓”、“香蕉”]},
{名称:'测试',单词:[“asd”,“qwe”]}
];
var searchwords=[“苹果”、“草莓”];
对于(i=0;i
输出应为:
最好的组是“水果”组
我想要一个列表(输出),如下所示:
结果=[2,0]
“2”代表“水果”列表,因为其中有两个单词。
“0”表示列表“test”,因为没有匹配的单词
谢谢大家! 我不会给你完整的答案,但这是你应该做的
for(i = 0; i < groups.length; i++){
}
for(i=0;i
第一部分是正确的!您将迭代每个组。现在您接下来需要做的是迭代当前组中的每个水果
for(i = 0; i < groups.length; i++){
for(j = 0; j < groups[i].words.length; ++j){
}
}
for(i=0;i
这将允许您访问当前组中的每个水果。现在,你需要找到一种方法来计算一个水果被重复了多少次;也许你应该为此编一本新字典
试着自己做,如果你发现任何其他问题,请告诉我。使用kibe首先给出的线索,自己尝试。这是一种方法,我尽可能多地保留您的原始代码,并编写您想要的输出。希望有帮助!如果有什么不合理的地方请告诉我/如果你需要任何解释
var groups = [
{name: 'fruits', words:["apple","strawberry", "banana"]},
{name: 'test', words:["asd","qwe"]}
];
var searchwords = ["apple", "strawberry"];
// Initialize empty array with size equal to size of groups
var res = Array(groups.length).fill(0);
// Initialize variables to hold biggest number of matches and index of said matches
var biggestIndex;
var biggestValue = 0;
for(i = 0; i < groups.length; i++) {
for(j = 0; j < groups[i].words.length; j++) {
if(searchwords.includes(groups[i].words[j]) == true){
res[i] += 1;
if(res[i] > biggestValue){
biggestValue = res[i];
biggestIndex = i;
}
}
}
}
// biggestIndex holds the index with the most matches
console.log("The best group is", groups[biggestIndex].name, "group");
// Res holds the list output you wanted
console.log(res);
var组=[
{名称:'水果',单词:[“苹果”、“草莓”、“香蕉”]},
{名称:'测试',单词:[“asd”,“qwe”]}
];
var searchwords=[“苹果”、“草莓”];
//初始化大小等于组大小的空数组
var res=数组(groups.length).fill(0);
//初始化变量以保存最大数量的匹配项和所述匹配项的索引
var指数;
var biggestValue=0;
对于(i=0;ibiggestValue){
最大值=res[i];
最大指数=i;
}
}
}
}
//biggestIndex保存匹配项最多的索引
log(“最好的组是”,groups[biggestIndex].name,“group”);
//Res保存您想要的列表输出
控制台日志(res);
有很多方法可以做到这一点。我更喜欢:
const result = groups.map(group => {
const matchedwords = group.words.filter(word => searchwords.includes(word));
return matchedwords.length;
}
附言:遵循kibe的答案,尝试解决你正在做的事情。如果您不熟悉它们,我还建议您查看它们和文档。使用阵列时,它们非常方便。哦,这个链接也很有用。。但这里只有一个财产谢谢你!我有一个错误:无法读取未定义的属性'length'。。在第[i]组,水果。length@DaveReiß那是我的错;它应该是
组[i].words.length
!