javascript - 如果对象包含字符串数组的每个元素,则返回 true 的算法

标签 javascript algorithm

在下面的方法中,

self.search = (obj, search) => {
...

第二个参数,search 是一个搜索字符串数组。第一个是对象。

该算法将用于 filter 方法,如果对象包含任何搜索字符串,该方法返回 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:

  • ['宠物']
  • ['宠物', '111']
  • ['Pet', 'asdf']

问题

self.search 如何更改为仅当 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', phone: { primary: 5556667777, mobile: 1112223333 } };

console.log(findAll(obj, ['Pet', '99']));   // false
console.log(findAll(obj, ['Pet']));         // true
console.log(findAll(obj, ['Pet', '111']));  // true
console.log(findAll(obj, ['Pet', 'asdf'])); // false

关于javascript - 如果对象包含字符串数组的每个元素,则返回 true 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42626339/

相关文章:

c# - Cannon 的矩阵乘法算法

javascript - 从 JavaScript 函数的字符串参数中获取值

javascript - 如果重新分配 ws.onmessage,我会错过 Web 套接字事件吗?

algorithm - 用于寻路的图形沙箱

algorithm - 根据偏好的相似性将两个元素(人)匹配在一起

c++ - 用 Chudnovsky 算法计算 Pi 数

javascript - SoundCloud API 可以直接从 Windows 访问(例如使用 python 脚本)还是必须是从服务器运行的互联网应用程序?

javascript - 你如何模拟拖动事件(单击按钮的鼠标移动)?

javascript - 具有相同 CSS 类的多个 <input> 已更新,而不是一个特定的

java - 餐厅菜单 : how to efficiently implement a nested loop to collect user input and conduct error checking