将多个数组与文本块匹配,如果找到 return 值
Match multiple Arrays with chunk of Text and return the values if found
简而言之: 我得到了 3 个数组,每个数组包含一个值列表,我想与一段文本匹配,如果文本包含任何值3 个数组应该 return 值,我将如何实现?
这是我的 3 个阵列:
var brand = ['giant', 'trek', 'specialized', 'cannondale', 'cervelo', 'pinarello']
var size = ['48', '50', '52', '54', '56', '58']
var year = ['2007', '2008', '2009', '2010', '2012', '2013']
这是正文,品牌、年份、尺码在正文中的位置每次都可能不同
var text = 'specialized Road Expert 2017\nkr.1,150 - Svendborg\n\nspecialized Road Expert str. 44 model 2017\nDenne fantastiske sko passer desværre ikke på mine fødder har været brugt 2 gange. \nKlamper følger ikke med. \nKøbt i Webike Odense 1/3 2017\nNy pris 1.599,-'
我愿意使用纯 JS、jquery、下划线、lodash 或任何可以完成工作的东西:)
如果您想 return 每个数组的值,此代码将完成工作:
var result = [brand, size, year].map(function(arr) {
return arr.filter(function(word) {
return text.indexOf(word) > -1;
});
});
任何创立的品牌都在结果[0]中,尺寸在结果[1]中等等。
如果要将它们合并到一个数组中,请使用:
var result = [brand, size, year].map(function(arr) {
return arr.filter(function(word) {
return text.indexOf(word) > -1;
});
}).reduce(function(prev, current) {
return prev.concat(current);
});
假设您不关心数组中的大小写敏感性或重复值(并且您使用的是 es6),那么这会起作用:
const res = [...brand,...size,...year].filter(item => text.includes(item));
console.log(res);
var brand = ['giant', 'trek', 'specialized', 'cannondale', 'cervelo', 'pinarello']
var size = ['48', '50', '52', '54', '56', '58']
var year = ['2007', '2008', '2009', '2010', '2012', '2013']
var text = 'specialized Road Expert 2017\nkr.1,150 - Svendborg\n\nspecialized Road Expert str. 44 model 2017\nDenne fantastiske sko passer desværre ikke på mine fødder har været brugt 2 gange. \nKlamper følger ikke med. \nKøbt i Webike Odense 1/3 2017\nNy pris 1.599,-'
var keywords = brand.concat(size, year);
var out = keywords.filter(function(item){
return text.includes(item)
})
console.log(out)
简而言之: 我得到了 3 个数组,每个数组包含一个值列表,我想与一段文本匹配,如果文本包含任何值3 个数组应该 return 值,我将如何实现?
这是我的 3 个阵列:
var brand = ['giant', 'trek', 'specialized', 'cannondale', 'cervelo', 'pinarello']
var size = ['48', '50', '52', '54', '56', '58']
var year = ['2007', '2008', '2009', '2010', '2012', '2013']
这是正文,品牌、年份、尺码在正文中的位置每次都可能不同
var text = 'specialized Road Expert 2017\nkr.1,150 - Svendborg\n\nspecialized Road Expert str. 44 model 2017\nDenne fantastiske sko passer desværre ikke på mine fødder har været brugt 2 gange. \nKlamper følger ikke med. \nKøbt i Webike Odense 1/3 2017\nNy pris 1.599,-'
我愿意使用纯 JS、jquery、下划线、lodash 或任何可以完成工作的东西:)
如果您想 return 每个数组的值,此代码将完成工作:
var result = [brand, size, year].map(function(arr) {
return arr.filter(function(word) {
return text.indexOf(word) > -1;
});
});
任何创立的品牌都在结果[0]中,尺寸在结果[1]中等等。 如果要将它们合并到一个数组中,请使用:
var result = [brand, size, year].map(function(arr) {
return arr.filter(function(word) {
return text.indexOf(word) > -1;
});
}).reduce(function(prev, current) {
return prev.concat(current);
});
假设您不关心数组中的大小写敏感性或重复值(并且您使用的是 es6),那么这会起作用:
const res = [...brand,...size,...year].filter(item => text.includes(item));
console.log(res);
var brand = ['giant', 'trek', 'specialized', 'cannondale', 'cervelo', 'pinarello']
var size = ['48', '50', '52', '54', '56', '58']
var year = ['2007', '2008', '2009', '2010', '2012', '2013']
var text = 'specialized Road Expert 2017\nkr.1,150 - Svendborg\n\nspecialized Road Expert str. 44 model 2017\nDenne fantastiske sko passer desværre ikke på mine fødder har været brugt 2 gange. \nKlamper følger ikke med. \nKøbt i Webike Odense 1/3 2017\nNy pris 1.599,-'
var keywords = brand.concat(size, year);
var out = keywords.filter(function(item){
return text.includes(item)
})
console.log(out)