如何通过子字符串数组过滤大量字符串?

时间:2018-11-30 17:29:50

标签: javascript arrays string dictionary filter

我正在使用angular过滤用于自动完成字段的大量字符串。 最有效的方法是什么?

largeArrayOfStrings = ['string1', 'string2', 'test one', 'one', 'two test', 'three', 'test one two', ...]
substring = [‘test’, ‘one’, ‘two’]

values = substringArray.map(h.includes)
// I would want values to be the following
values = ['test one two']
// That is the only string that contains all the strings from substring array.

3 个答案:

答案 0 :(得分:0)

h设置为一个具有恒定查找时间的集合:

  const toFilter = new Set(h);

  const result = substringArray.filter(el => toFilter.has(el));

答案 1 :(得分:0)

这将是一种实现方式:

const strings = ['string1', 'string2', 'test one', 'one', 'two test', 'three', 'test one two']
const subs = ['test', 'one', 'two']

const result = strings.filter(x => subs.every(y => x.includes(y)))

console.log(result)

结合使用Array.filterArray.everyString.includes

想法是从单词过滤器开始,并确保every数组中的subs子字符串在主数组的当前单词中得到匹配。如图所示,只有'test one two'会发生这种情况。

答案 2 :(得分:0)

好的,所以我一直在编写一个库来做类似的事情,并且我找到了解决这个问题的简单方法。该代码最初是用TypeScript编写的,但是我已经将其转换为JS:

MapView

这表示该函数假设数组中可以包含字符串以外的其他项,如果要确保字符串,只需在函数的开头添加以下行即可:

dispatchDraw()

顺便说一句,如果您想检出库,则GitHub位于以下链接: https://railrunner16.me/raildash/

祝你好运,祝你好运!