我正在使用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.
答案 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.filter
和Array.every
和String.includes
。
想法是从单词过滤器开始,并确保every
数组中的subs
子字符串在主数组的当前单词中得到匹配。如图所示,只有'test one two'
会发生这种情况。
答案 2 :(得分:0)
好的,所以我一直在编写一个库来做类似的事情,并且我找到了解决这个问题的简单方法。该代码最初是用TypeScript编写的,但是我已经将其转换为JS:
MapView
这表示该函数假设数组中可以包含字符串以外的其他项,如果要确保字符串,只需在函数的开头添加以下行即可:
dispatchDraw()
顺便说一句,如果您想检出库,则GitHub位于以下链接: https://railrunner16.me/raildash/
祝你好运,祝你好运!