检查对象值的任何部分是否包含在字符串中

我有一个看起来像这样的字符串: /link-to-page?foo=bar&test=1


另外我有一个看起来像这样的对象:


{

  key: '/',

  foo: 'bar',

  test: false,

  mock: 'data'

}

我想实现的事情很简单(我认为),但也许我在这里错过了显而易见的事情:


我想检查我的对象的任何值是否包含在我的字符串中。


我的第一个想法是这样做: Object.keys(obj).map(o => str.includes(obj[o]))-但这显然只会返回一组布尔值。


试试这个:Object.keys(obj).map(o => obj[o]).some(s => str.includes(s))也不会工作,因为它可能会提供误报(在我的对象中我有key一个/不应考虑的值,但它会返回true这里 - 我只想搜索“实际文本”如果说得通)。


我应该首先转换对象键和字符串以摆脱任何/还是有其他方法?


谢谢!


慕姐8265434
浏览 166回答 5
5回答

湖上湖

您可以使用替换方法摆脱任何 /let oldstr = '/link-to-page?foo=bar&test=1';let str = oldstr.replace('/', '');console.log(str)let obj = {  key: '/',  foo: 'asd',  test: false,  mock: 'data'}let a = Object.values(obj).some(s => str.includes(s))console.log(a);

一只名叫tom的猫

您可以使用正则表达式来避免匹配字符str="/link-to-page?foo=bar&test=1"ob={  key: '/',  foo: '/',  test: false,  mock: '/'}path=/[a-zA-Z]/res=Object.values(ob).some(o=>path.test(o)?str.includes(o):false)console.log(res)

汪汪一只猫

单线let isinclude=(str,obj)=>(str=str.replace('/',''),Object.keys(obj).reduce((a,v)=>a || str.includes(v),false))

Smart猫小萌

您可以存储有用的属性,然后循环遍历它们以检查对象内部并防止过滤:const data = '/link-to-page?foo=bar&test=1';const relevantProperties = ['foo', 'test', 'mock'];const obj = {&nbsp; key: '/',&nbsp; foo: 'bar',&nbsp; test: false,&nbsp; mock: 'data'};for (let i = 0; i < relevantProperties.length; ++i) {&nbsp; const property = relevantProperties[i];&nbsp;&nbsp;&nbsp; if (data.includes(obj[property])) {&nbsp; &nbsp; console.log(property);&nbsp; &nbsp; break;&nbsp; }}

守着一只汪

遍历您的对象值并使用.match方法来检查这些值是否包含在给定的字符串中。如果过滤后的数组的长度是,则>0意味着找到了匹配项let obj = {&nbsp; key: '/',&nbsp; foo: 'bar',&nbsp; test: false,&nbsp; mock: 'data'}let str = '/link-to-page?foo=bar&test=1'let matchedValues = Object.values(obj).filter(x=>str.match(x)) // will return an array of all matching values// -> (2) ["/", "bar"]if(matchedValues.length > 0){&nbsp; console.log("Matches found")}else{&nbsp; console.log("Matches found")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript