Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果对象包含字符串数组的每个元素,则返回true的算法_Javascript_Algorithm - Fatal编程技术网

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,它应该只是对象的值。