我在编码方面是一个完整的初学者,但我正在努力完成以下任务。
我有一个像这样的多维数组:
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.');
}
}
答案 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
}