Javascript 如何检查数组中的文本变量是否包含来自另一个数组的每个值的最多文本量?
我有一个数组Javascript 如何检查数组中的文本变量是否包含来自另一个数组的每个值的最多文本量?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一个数组 让数组1=[“一”、“二”、“三”] 我有一个单独的数组 let array2=[{var1:“一三二”,var2:“224824834”},{var1:“一二”,var2:“4348193564”}] 正确答案是var1 我想遍历array2,看看var1是否包含array1中的所有内容。问题是,它们的顺序不正确,array2中的其他一些内容可能与array1中的值匹配较少,我想要匹配最多的一个 这就是我现在拥有的,但它体积庞大,工作速度不快。它有点小毛病,我需要它快点。有人告诉
让数组1=[“一”、“二”、“三”]
我有一个单独的数组
let array2=[{var1:“一三二”,var2:“224824834”},{var1:“一二”,var2:“4348193564”}]
正确答案是var1
我想遍历array2,看看var1是否包含array1中的所有内容。问题是,它们的顺序不正确,array2中的其他一些内容可能与array1中的值匹配较少,我想要匹配最多的一个
这就是我现在拥有的,但它体积庞大,工作速度不快。它有点小毛病,我需要它快点。有人告诉我,你可以做得更快,但随后继续向我隐藏代码。如果有人能帮忙,我将不胜感激
let possible_1 = [];
let possible_2 = [];
let product = {}
let nothing = false;
for (var i = 0; i < info.keywords.length; i++) {
console.log('Checking every keyword..');
if (i == 0) {
console.log('First keyword... ' + info.keywords[i]);
for (var v = 0; v < body.products.length; v++) {
if (body.products[v].title.toLowerCase().indexOf(info.keywords[i].toLowerCase()) != -1) {
console.log('Matched keyword... ' + info.keywords[i] + " " + body.products[v].title);
possible_1.push(body.products[v])
}
}
if (possible_1 == []) {
nothing = true;
console.log('Nothing found...');
}
} else {
console.log('Not first keyword... ' + info.keywords[i]);
if (possible_1 == []) {
for (var b = 0; b < possible_2.length; b++) {
if (possible_2[b].title.toLowerCase().indexOf(info.keywords[i].toLowerCase()) != -1) {
console.log('Matched keyword... ' + info.keywords[i] + " in " + possible_2[b].title);
possible_1.push(possible_2[b])
}
}
if (info.keywords.length != i) {
possible_2.length = 0;
}
} else {
for (var s = 0; s < possible_1.length; s++) {
if (possible_1[s].title.toLowerCase().indexOf(info.keywords[i].toLowerCase()) != -1) {
console.log('Matched keyword... ' + info.keywords[i] + " in " + possible_1[s].title);
possible_2.push(possible_1[s])
}
}
if (info.keywords.length != i) {
possible_2.length = 0;
}
}
}
}
if (nothing != true) {
if (possible_1 == []) {
product = possible_2[0]
console.log("Matched with product: " + possible_2[0].title);
} else {
product = possible_1[0]
console.log("Matched with product: " + possible_1[0].title);
}
}
让可能的_1=[];
设可能_2=[];
设乘积={}
让一切都不假;
对于(变量i=0;i
您可以使用reduce
,拆分var1
来创建一个数组,然后使用includes
检查它们是否存在于数组1
中并保持计数
让数组1=[“一”、“二”、“三”];
设max=0;
让计数=0;
设array2=[{var1:“一三二”,var2:“224824834”},{var1:“一二”,var2:“4348193564”}];
constgroupbyoccurrence=array2.reduce((accu,{var1})=>{
计数=0;
var1.split(“”).forEach((项目)=>{
if(阵列1.包括(项目)){
计数++;
}
});
如果(最大值<计数)最大值=计数;
累计推送({var1,count});
返回accu;
}, []);
const output=groupbyoccurrence.filter(({count})=>count==max);
控制台日志(输出)
我不知道您是否可以使用一些外部库,但是underline.js
或lodash
可以让您轻松使用。