簡體   English   中英

如何檢查數組中的文本變量是否包含來自另一個數組的每個值的最多數量的文本?

[英]How do I check if a text variable in an array contains the most amount of text from every value of another array?

我有一個數組

let array1 = ["one", "two", "three"]

我有一個單獨的數組,

let array2 = [{var1: "one three two", var2: "224824834"},{var1: "one two", var2: "4348193564"}]

正確答案是var1

我想遍歷array2,看看var1是否包含array1中的所有內容。 問題在於它們順序混亂,並且array2中的其他一些內容可能與array1中的值較少匹配,我想要與MOST匹配的值。

這就是我現在所擁有的,但是它體積龐大且無法達到預期的速度。 小故障,我需要它快速。 有人告訴我您可以更快地執行此操作,但是隨后向我隱藏了代碼。 如果有人可以幫助,我將不勝感激。

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);
         }
       }

您可以使用reduce ,split var1創建一個數組,然后使用includes和maintain count檢查它們是否存在於array1

 let array1 = ["one", "two", "three"]; let max = 0; let count = 0; let array2 = [{var1: "one three two", var2: "224824834"},{var1: "one two", var2: "4348193564"}]; const groupByOccurence = array2.reduce((accu, {var1}) => { count = 0; var1.split(" ").forEach((item) => { if(array1.includes(item)) { count++; } }); if(max < count) max = count; accu.push({var1, count}); return accu; }, []); const output = groupByOccurence.filter(({count}) => count === max); console.log(output); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM