Javascript 如果对象包含字符串数组的每个元素,则返回true的算法
在下面的方法中Javascript 如果对象包含字符串数组的每个元素,则返回true的算法,javascript,algorithm,Javascript,Algorithm,在下面的方法中 self.search = (obj, search) => { ... 第二个参数,search是搜索字符串的数组。第一个是对象 该算法将用于过滤器方法,如果对象包含任何搜索字符串,该方法将返回true self.search = (obj, search) => { return Object.keys(obj).some(k => typeof obj[k] === 'object' ? self.search(obj[k], s
self.search = (obj, search) => {
...
第二个参数,search
是搜索字符串的数组。第一个是对象
该算法将用于过滤器
方法,如果对象包含任何搜索字符串,该方法将返回true
self.search = (obj, search) => {
return Object.keys(obj).some(k =>
typeof obj[k] === 'object'
? self.search(obj[k], search)
: search.some(v => String(obj[k]).includes(v))
)
}
例如,给定以下对象:
{
name: 'Peter',
phone: {
primary: 5556667777,
mobile: 1112223333
}
}
self.search
将为search
参数的以下值返回true:
['Pet']
['Pet','111']
['Pet','asdf']
search
数组的每个元素时,self.search
如何更改为返回true
本质上,['Pet','asdf']
应该返回false
更新
当搜索字符串数组跨级别时,将some
替换为every
不起作用
// `['Pet']` correctly returns true
// `['Pet', '111']` returns false when it should return true
// `['Pet', 'asdf']` correctly returns false
self.search = (obj, search) => {
return Object.keys(obj).some(k =>
typeof obj[k] === 'object'
? self.search(obj[k], search)
: search.every(v => String(obj[k]).toLowerCase().includes(v))
)
}
您可以对数组的每一项使用单个搜索功能和元搜索
var search=(obj,v)=>Object.keys(obj).some(k=>typeof obj[k]=='Object'?search(obj[k],v):obj[k].toString().includes(v)),
findAll=(obj,array)=>array.every(a=>search(obj,a)),
obj={name:'Peter',电话:{primary:5556667777,mobile:111222333};
log(findAll(obj,['Pet','99']);//假的
console.log(findAll(obj,['Pet']);//真的
console.log(findAll(obj,['Pet','111']);//真的
log(findAll(obj,['Pet','asdf']);//false
是否尝试了every()
而不是some()
?@KursadGulseven,是的,请参阅更新。正在搜索的值必须是对象属性的值,也可以是键?@AramilRey,它应该只是对象的值。