Javascript 检查字符串中是否包含对象值的任何部分
我有一个字符串如下所示:Javascript 检查字符串中是否包含对象值的任何部分,javascript,string,object,functional-programming,Javascript,String,Object,Functional Programming,我有一个字符串如下所示: /链接到页面?foo=bar&test=1 另外,我有一个对象,看起来像这样: { key: '/', foo: 'bar', test: false, mock: 'data' } 我想要实现的事情很简单(我想),但也许我忽略了这里显而易见的一点: 我想检查对象的任何值是否包含在字符串中 我的第一个想法是: Object.keys(obj.map)(o=>str.includes(obj[o]))-但这显然只返回一个布尔数组 尝试这样做:Object
/链接到页面?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])。一些(s=>str.includes(s))
也不会起作用,因为它可能会提供误报(在我的对象中,我的键的值为//code>,不应将其考虑在内,但它会在此处返回true
,我只想搜索“实际文本”(如果有意义的话)
我应该首先转换对象键和字符串以去除任何/
,还是有其他方法
谢谢!您可以使用正则表达式来避免匹配字符
str=“/link to page?foo=bar&test=1”
ob={
键:“/”,
foo:“/”,
测试:错误,
模拟:'/'
}
路径=/[a-zA-Z]/
res=Object.values(ob).some(o=>path.test(o)?str.includes(o):false)
log(res)
您可以使用replace方法除去任何/
let oldstr='/链接到页面?foo=bar&test=1';
设str=oldstr.replace('/','');
console.log(str)
设obj={
键:“/”,
傅:“asd”,
测试:错误,
模拟:“数据”
}
设a=Object.values(obj).some(s=>str.includes)
console.log(a);
您可以存储有用的属性,然后循环检查它们以检查对象内部并防止过滤:
const data='/链接到页面?foo=bar&test=1';
const-relevantProperties=['foo','test','mock'];
常量对象={
键:“/”,
福:“酒吧”,
测试:错误,
模拟:“数据”
};
for(设i=0;i }
迭代对象值,并使用.match
方法检查值是否包含在给定字符串中。如果筛选数组的长度为>0
,则表示找到匹配项
让obj={
键:“/”,
福:“酒吧”,
测试:错误,
模拟:“数据”
}
让str='/链接到页面?foo=bar&test=1'
让matchedValues=Object.values(obj).filter(x=>str.match(x))//将返回所有匹配值的数组
//->(2)[“/”,“条”]
如果(matchedValues.length>0){
log(“找到匹配项”)
}否则{
log(“找到匹配项”)
}
一个衬里
let isinclude=(str,obj)=>(str=str.replace('/',''),Object.keys(obj).reduce((a,v)=>a || str.includes(v),false))
说到“缺少明显的”…谢谢!完全忘记了.replace()
方法。duh!让str=oldstr.replace(/\W/g');您可以使用此regexp匹配所有非单词字符