簡體   English   中英

如何檢查字符串是否包含多維數組中的所有單詞?

[英]How to check if a string contains all words from a multidimensional array?

在編碼方面,我是一個完整的初學者,但我正在努力完成以下工作。

我有一個像這樣的多維數組:

var requiredProducts = [{
    product: 'PRODUCT 1',
    keywords: ['KEYWORD1', 'KEYWORD2', 'KEYWORD3'],
    price: '50.00'
},{
    product: 'PRODUCT 2',
    keywords: ['KEYWORD4', 'KEYWORD5', 'KEYWORD6'],
    price: '50.00'
}];

我正在從 HTML 元素中檢索字符串,例如:

這個字符串太棒了,它包含 KEYWORD1 和 KEYWORD3,以及 KEYWORD2

如何檢查字符串是否包含任何關鍵字數組中的所有關鍵字(關鍵字的順序無關緊要)。 幾天來我一直在嘗試各種事情,但除了大腦酸痛之外,並沒有真正取得任何成就。

幫助感激不盡。

如果它有幫助,這是我試圖將其添加到的代碼塊。 應該從“***”中調用新函數,如果找到所有關鍵字,則允許此函數繼續。

function checkPopup(jNode) {
console.log(scriptName + 'Found new popup.');
console.log(scriptName + 'Checking popup...');
linkText = jNode.attr("title");
linkText = linkText.toUpperCase();
console.log(scriptName + 'Popup: ' + linkText);
if *** {
    console.log(scriptName + 'Popup matched.');
} else {
    console.log(scriptName + 'Product not matched.');
}
}

我假設您沒有使用外部模塊或庫來計算兩個數組的交集。 嘗試這個:

var phrase = "This string is fantastic, it contains KEYWORD1 and KEYWORD3, and KEYWORD2";
var words = phrase.split(/[\s,]/);

var results = []

requiredProducts.forEach(function (item) {
    var intersection = item.keyword.filter(function(value) {
        return words.indexOf(value) > -1;
    });
    results.push({
        product: item.product,
        match: item.keyword.length === intersection.length,
        intersection: intersection
    });
});

console.log(results);

您可以使用Array.prototype.every它將對數組中的項運行謂詞函數,並且只有在每次迭代都返回 true 時才返回 true。

請注意Array.prototype.every僅在現代瀏覽器中受支持。

 var requiredProducts = [{ product: 'PRODUCT 1', keyword: ['KEYWORD1', 'KEYWORD2', 'KEYWORD3'], price: '50.00' }, { product: 'PRODUCT 2', keyword: ['KEYWORD4', 'KEYWORD5', 'KEYWORD6'], price: '50.00' }]; var str1 = 'This string is fantastic, it contains KEYWORD1 and KEYWORD3, and KEYWORD2' var str2 = 'This string is fantastic, it contains KEYWORD4 and KEYWORD5, and KEYWORD6' function matchProductByKeywords(str, products) { return products.filter(function(product){ return product.keyword.every( function(word) { return str.match(word) } ) }) } console.log( 'str1', matchProductByKeywords(str1, requiredProducts), 'str2', matchProductByKeywords(str2, requiredProducts) )

這是您可以使用的每個墊片。 對於不受支持的瀏覽器

Array.prototype.every = Array.prototype.every || function(predicate){
  for (var ii = 0, ll = this.length; ii < ll; ii+=1) {
    if (!predicate.call(this, this[ii], ii, this)) {
     return false
    }
  }
  return true
}

暫無
暫無

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

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