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

时间:2016-10-04 12:37:07

标签: javascript jquery arrays string 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.');
}
}

2 个答案:

答案 0 :(得分:0)

我假设你没有使用外部模块或库来计算两个数组的交集。试试这个:

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

答案 1 :(得分:-2)

您可以使用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
}