在 javascript 中的对象数组中搜索深度嵌套的值

2024-03-02

我基本上试图实现对任何给定值的搜索应该在对象键值数组中查找(也可以是嵌套对象)。这是一个例子。下面的函数将采用一个对象和一个查询来搜索数组对象键值。因此,如果找到匹配项,它应该从该数组中进行过滤。

function searchObj (obj, query) {
  for (var key in obj) {
    var value = obj[key];
    if (typeof value === 'object') {
       searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }
  }
}

这是虚拟数据

var demoData=[
  {id:1,desc:{original:'trans1'},date:'2017-07-16'},
  {id:2,desc:{original:'trans2'},date:'2017-07-12'},
  {id:3,desc:{original:'trans3'},date:'2017-07-11'},
  {id:4,desc:{original:'trans4'},date:'2017-07-15'}
];

这是我正在过滤匹配对象的数组

var searchFilter = demoData.filter(function(obj){
     return searchObj(obj, 'trans1');
});
console.log(searchFilter);

例如:如果我打电话searchObj(obj,'2017-07-15')它返回该特定对象,但如果我搜索trans1或者简单地trans它应该查看该对象,然后返回匹配项。我现在有点陷入困境,任何帮助将不胜感激。谢谢。


情况 1 有效,因为您没有遇到递归。但在情况 2 中,即使找到结果,你仍会继续搜索。

一旦找到就返回该对象。

if (typeof value === 'object') {
       return searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }

function searchObj (obj, query) {

  for (var key in obj) {
    var value = obj[key];
    if (typeof value === 'object') {
       return searchObj(value, query);
    }
    if (typeof value === 'string' && value.toLowerCase().indexOf(query.toLowerCase()) > -1) {
       return obj;
    }
  }
}

var demoData=[
  {id:1,desc:{original:'trans1'},date:'2017-07-16'},
  {id:2,desc:{original:'trans2'},date:'2017-07-12'},
  {id:3,desc:{original:'trans3'},date:'2017-07-11'},
  {id:4,desc:{original:'trans4'},date:'2017-07-15'}
];

var searchFilter = demoData.filter(function(obj){
     return searchObj(obj, 'trans1');
});
console.log(searchFilter);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 javascript 中的对象数组中搜索深度嵌套的值 的相关文章

随机推荐

  • 获取 Azure AD B2C 策略的 SAML 元数据时出错 - AADB2C90022

    在 Azure AD B2C 中设置自定义策略以连接到 ADFS 身份提供程序 这需要一个 SAML 元数据端点 如下面链接的文档中所指定 https learn microsoft com en us azure active direc
  • 为什么 XHTML 中的


    不同?

    这是 HTML 页面的完整源代码 one br two br three br four 谁能解释为什么当我在 IE8 或 chrome 中查看页面时 三 和 四 之间会出现额外的空行 我认为标准应该让所有浏览器看起来都一样 据我所知 这个
  • 自动将 CSV 文件导入 SQL Server [重复]

    这个问题在这里已经有答案了 我正在尝试将许多不同的 csv 文件导入 SQL Server 2008R2 数据库 文件中的数据以逗号分隔 我对文件格式没有发言权 有些列是文本 并用双引号分隔 就像在 Excel 中一样 这些列包含的文本可能
  • 在View的背景中画一个半圆

    我正在尝试创建一个背景为半圆的 TextView 我使用 ShapeDrawable 创建一个椭圆形 我尝试使用 ScaleDrawable 将椭圆形的垂直尺寸加倍并剪辑它来创建半圆 但是 ScaleDrawable 没有任何效果 为什么不
  • 我可以使用新的 ZeroClipboard 从剪贴板获取数据吗?

    我在项目中使用这个新版本的 ZeroClipboard https github com jonrohan ZeroClipboard https github com jonrohan ZeroClipboard 创建按钮来从 HTML
  • python中的加权非负最小二乘线性回归[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道有一个加权 OLS 求解器 http statsmodels sourceforge net d
  • 是否可以自定义 Visual Studio 2017 SSRS rptproj MSBuild 文件?

    我的公司对自定义 MSBuild 目标文件库进行了大量投资 我们用它来构建完整的产品 我们在源代码管理中拥有的每个项目文件都会导入至少一个自定义目标文件 这些文件最终都会导入一个包含大量通用目标和属性的核心目标文件 最近 我们在我们的解决方
  • 给定输入生成真值表?

    是否有一种智能算法可以获取多个概率并在多维数组或容器内生成相应的真值表 Ex n 3 N 0 0 0 0 0 1 0 1 0 1 1 1 我可以使用 for 循环和 If 来完成此操作 但我知道我的方法会很慢且耗时 因此 我想问是否有一种高
  • Bootstrap 3 - 更改下拉菜单背景颜色

    我对 Bootstrap 很陌生 我设置了一个下拉菜单并尝试了颜色 我想做的是在选择下拉标题药丸后更改其颜色 它目前变为浅灰色 这是我的代码 div class row hidden xs div class col md 12 ul cl
  • 无法在 Selenium (Python) 中定位元素

    我尝试在 Chrome 中使用 Selenium 但无法在页面上找到元素 我尝试使用链接文本 XPath 和完整 XPath 但只有一个错误 并且没有单击该元素 from selenium import webdriver from sel
  • Python:使用递归算法作为生成器

    最近 我编写了一个函数来生成具有重要约束的某些序列 这个问题是通过自然递归解决方案来解决的 现在 即使对于相对较小的输入 序列也有数千个 因此我更愿意使用我的算法作为生成器 而不是使用它来填充所有序列的列表 这是一个例子 假设我们想用递归函
  • 如何将字母表中的 3 个字母前移(凯撒密码)?

    我正在尝试制作一个程序来加密用户提交的字符串 我想使用一种加密技术 其中字符串是字母表中的前 3 个字母 例子 abc会成为def 目前我有一个文本框 TextBox1 和一个按钮 Button1 到目前为止我的代码 Private Sub
  • 在Eclipse中通过项目搜索

    如何在Eclipse中通过项目搜索某个单词 当我启动 CTRL h 时 我需要选择字段 方法或 但我需要查找项目中所有出现的情况 而不是方法 字段或 如何实现这一目标 CTRL H gt File Search gt Containing
  • 如何将文件添加到应用程序沙箱中的 /Documents 目录

    这是我所在的地方 I have JSON files I need to mount into Objective C Objects I have an XCode Project I have dragged the folder of
  • Javascript 无法解析相对于当前脚本的工作路径

    我有一个脚本在http localhost js foo js需要从文件中生成一个 Web Workerhttp localhost js fooWorker js 我以为我可以做这样的事情 var worker new Worker fo
  • 文本区域编辑器 Redactor。使用 jQuery 插入值

    有字段文本区域id tr 使用 HTML 编辑器 Redactor 最新版本 尝试按照 API 文档中的描述准确设置字段的值 tr redactor insertText text or tr redactor insertHtml tex
  • “冻结”张量流中的一些变量/范围:stop_gradient 与传递变量以最小化

    我正在尝试实施对抗性神经网络 http arxiv org abs 1406 2661 这需要在交替训练小批量期间 冻结 图的一个或另一部分 IE 有两个子网 G 和 D G Z gt Xz D X gt Y 其中损失函数G依赖于取决于D
  • 抓取文本然后将该文本提交到特定路径

    我想做的是抓取文本 然后将该文本提交到接受表单输入 name mykeyword 的特定应用程序路径 并且我也希望在浏览器的新选项卡中打开它 我做了一些练习 但没有运气 任何想法 ScanTitle click function var m
  • 拦截html按钮点击

    当用户点击 html 按钮时是否有可能拦截 我有一个 webviewclient 它加载带有两个按钮的登录页面 允许和拒绝 我希望您在按下拒绝按钮时进行拦截 拒绝和允许具有相同的 basUrl 和 js 执行正确的重定向 提前致谢 您可能不
  • 在 javascript 中的对象数组中搜索深度嵌套的值

    我基本上试图实现对任何给定值的搜索应该在对象键值数组中查找 也可以是嵌套对象 这是一个例子 下面的函数将采用一个对象和一个查询来搜索数组对象键值 因此 如果找到匹配项 它应该从该数组中进行过滤 function searchObj obj