部分匹配的两个数组的交集

时间:2019-05-22 07:13:44

标签: javascript arrays

假设我有以下数组:

JCodeModel

现在,如果它们包含来自带有部分字符串(var array_full = ['table', 'sleeping', 'data']; var array_part = ['sleep', 'able']; )的数组中的项目,我想从包含完整字符串(array_full)的数组中筛选出项目。

我可以这样:

array_part

但是我敢肯定有更好的方法,不是吗?

编辑:谢谢大家!

5 个答案:

答案 0 :(得分:2)

您可以像这样使用someincludes

const array_full = ['table', 'sleeping', 'data'];
const array_part = ['sleep', 'able'];

const output = array_full.filter(a => array_part.some(b => a.includes(b)))

console.log(output)

includes和箭头函数为ES2015 +语法。如果您想使用ES5,可以执行以下操作

var array_full = ['table', 'sleeping', 'data'];
var array_part = ['sleep', 'able'];

var output = array_full.filter(function(a) {
  return array_part.some(function(b) {
    return a.indexOf(b) > -1
  })
})

console.log(output)

答案 1 :(得分:2)

如果您的用例确实涉及在字符串中查找字符串:

您可以从array_part

构建正则表达式

答案 2 :(得分:2)

DbCommand cmd = dbContext.Database.Connection.CreateCommand();

答案 3 :(得分:1)

您可以过滤数组并查找包含的部分

var array_full = ['table', 'sleeping', 'data'],
    array_part = ['sleep', 'able'],
    result = array_full.filter(s => array_part.some(p => s.includes(p)));

console.log(result);

使用Set来维护array_part的顺序,因为否则您将无法获得array_full的一项。

var array_full = ['table', 'sleeping', 'data'],
    array_part = ['sleep', 'able'],
    result = Array.from(array_part.reduce(
        (r, p) => array_full.reduce((q, s) => s.includes(p) ? q.add(s) : q, r),
        new Set
    ));

console.log(result);

答案 4 :(得分:1)

如果您知道部分单词是由单词字符组成的,并且不包含正则表达式(例如*,$等)专用的字符,则可以将array_part编译为正则表达式:

var array_full = ['table', 'sleeping', 'data'];
var array_part = ['sleep', 'able'];

let rx = new RegExp(array_part.join('|'))
console.log(array_full.filter(w => rx.test(w)))