我的问题是,我必须根据给定的数组过滤一个数组数组(在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
答案 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,2
,t2 -> 0,2
,t3 -> 1,2
等地图中。
然后在O(d)
中运行查询,d
是元素的最长地图。