以有效的方式基于给定的数组过滤数组

时间:2018-01-07 13:29:17

标签: javascript arrays algorithm

我的问题是,我必须根据给定的数组过滤一个数组数组(在javascript中)。要搜索的数组结构如下,

ByHPF

和输入数组将是这样的

var arrayToSearchUpon [
['t1','t2','t4','t7'],
['t1','t2','t8','t5'],
['t9','t4']
....//so on
];

结果应该是这样的

var arrayInputFilterWith = ['t1','t2'];

现在我正在以蛮力的方式做所有这些,即将所有输入元素与搜索数组的所有元素进行比较,但是性能不佳。想知道这个问题是否有更好的解决方案。

提前致谢。

现在使用这种方式,

[['t1','t2','t4','t7'],['t1','t2','t8','t5'],...//all arrays having t1 & t2 elements]
Right 

2 个答案:

答案 0 :(得分:1)

可以使用Array#every,一旦找到匹配就会中断

var matches = ['t1', 't2'];
var data = [
  ['t1', 't2', 't4'], //match
  ['t9', 't2', 't4'], // no match
  ['t2', 't3', 't1']  // match
];
var res = data.filter(arr => matches.every(e => arr.includes(e)));
console.log(JSON.stringify(res))

答案 1 :(得分:1)

如果您可以预先处理数据以便以有效的方式进行过滤,那么您可以蛮力地遍历数组。然后将地图存储在t1 -> 0,2t2 -> 0,2t3 -> 1,2等地图中。

然后在O(d)中运行查询,d是元素的最长地图。