将多个数组与文本块匹配,并返回值(如果找到)

时间:2017-05-02 15:10:27

标签: javascript jquery arrays underscore.js

简而言之:我有3个数组,每个数组包含一个我希望与一大块文本匹配的值列表,如果文本包含任何3个数组中的任何值,它应该返回值,我将如何实现?

这是我的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或任何可以完成工作的东西:)

3 个答案:

答案 0 :(得分:0)

如果要返回每个数组的值,此代码将执行以下任务:

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

答案 1 :(得分:0)

假设您不关心数组中的区分大小写或重复值(并且您使用的是es6),那么这将起作用:

const res = [...brand,...size,...year].filter(item => text.includes(item));
console.log(res);

答案 2 :(得分:0)

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)