Javascript 在短语数组和字符串变量之间创建精确匹配的数组

Javascript 在短语数组和字符串变量之间创建精确匹配的数组,javascript,Javascript,我有一系列短语,如: let structures = ['to earth' ,'to protect you', 'i do', 'i love', 'i was sent', 'i want']; 我有一个字符串变量,比如: let speechResult = 'i was sent to mars and earth i wanted i love' 我想根据数组中短语和字符串变量的精确匹配创建一个新数组 上述示例的预期结果为: let newArr = [ 'i was sent

我有一系列短语,如:

let structures = ['to earth' ,'to protect you', 'i do', 'i love', 'i was sent', 'i want'];
我有一个字符串变量,比如:

let speechResult = 'i was sent to mars and earth i wanted i love'
我想根据数组中短语和字符串变量的精确匹配创建一个新数组

上述示例的预期结果为:

let newArr = [ 'i was sent', 'i love'];
注意:代码的性能非常重要

更新:我这样做了,但有两个问题:

-第一:我没有得到预期结果的顺序

-第二:没有精确的匹配,所以我根本没有得到预期的结果

let structures=['到地球','保护你','我做','我爱','我被派去','我想要';
let speechResult='我被送到火星和地球,我想要我爱的'
设newArr=[];
for(设i=0;i
filter()
迭代数组中的每个元素,并仅返回符合条件的元素,如
return
语句所示

idx
是字符串中每个元素的起始索引。如果元素不在字符串中,则返回-1

nex
是元素最后一个字符字符串中的索引。它用于确保元素在字符串中不以单词的中间结尾

最后,
sort()

let arr=[“地球”,“保护你”,“我做”,“我爱”,“我被派去”,“我想要”]
let str='我被送到火星和地球我想要我爱'
让res=arr.filter(el=>{
设idx=str.indexOf(el)
设nex=idx+el.length
返回idx>-1&&(str.length==nex | | str[nex]===“”)
}).sort((a,b)=>str.indexOf(a)-str.indexOf(b))

console.log(res)
这基本上很容易通过过滤解决:

let structures=['到地球','保护你','我做','我爱','我被派去','我想要';
let speechResult='我被送到火星和地球,我想要我爱的'
const newArr=structures.filter((结构)=>speechResult.includes(结构));

控制台日志(newArr)
.match(新的RegExp(`\\b(${structures.map(e=>e.replace(/[-\/\^$*+.()[\]{}]/g,\\\$&')).join(“\\$”)\\b`,“g”)
你所说的“代码的性能很重要”是什么意思?你如何衡量它@ASDF,你能解释一下上面的解决方案吗?也许把它贴出来作为一个答案?如果它甚至没有给你你想要的结果,这怎么会很精彩呢?@SaraRee看到我的编辑,我试着解释一下重要的问题parts@SaraRee此外,如果这对您很重要,请参阅“我的代码编辑”,以按照它们在字符串中的显示顺序对它们进行排序。@ASDFGerte排序?这是一个简单的解决方案。现在它给出了期望的结果,单位为O(n²log(n))。但我并不是真的在抱怨你的回答,更重要的是,这个问题对我来说变得不清楚了,当这里的错误顺序是“精彩”的时候——我想我可能误解了这个问题。