如何检查字符串是否包含多维数组中的所有单词



当涉及到编码时,我是一个完全的初学者,但我正在努力完成以下任务。

我有一个多维数组,像这样:

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
}

相关内容

  • 没有找到相关文章

最新更新