在 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 中的对象数组中搜索深度嵌套的值 的相关文章

  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 是否有任何 javascript 库可以为 HTML 创建一个漂亮的结构化(树)差异?

    我正在尝试提出一个解决方案来支持我们在整个网站中使用的 历史视图 机制 对于此历史视图的 UI 我想向用户展示对象的两个修订之间发生的更改 换句话说 差异 这是一个真正的挑战 因为所讨论的对象都相当复杂 我认为最好的方法是将每个对象渲染为
  • Angular 2 - 内容未加载到路由器插座中

    我对 Angular 2 还是很陌生 希望你们能帮助我 我有一个相当简单的应用程序 有一个登录页面 成功登录后用户将被定向到带有侧菜单的页面 登录屏幕没有此侧边菜单 当用户注销时 他会再次被引导至登录页面 问题是登录后侧菜单变得可见 但其他
  • 如何将列表复制到数组

    我有导游名单 List
  • 在 JavaScript 中使用 document.getElementById

    有人可以解释一下是什么document getElementById demo 下面的例子中的线是什么 我知道 getElementById 获取演示的 id 但 id 是 p p 到底是什么 p p 在这段代码中做什么 document
  • 无法调用 Node.js 中 ES6 定义的类中的方法 [重复]

    这个问题在这里已经有答案了 我正在使用 Node js Express js 和 MongoDB 制作一个应用程序 我正在使用 MVC 模式 并且还有单独的路由文件 我正在尝试创建一个控制器类 其中一个方法调用其中声明的另一个方法 但我似乎
  • 为什么 toDataURL 在移动设备上无法获取画布内容?

    我正在尝试从画布中获取图像 它可以在电脑浏览器上运行 但不能在移动设备上运行 我在 iPhone 上的 Safari 中进行了测试 这是代码 draw click function drawing css visibility visibl
  • Javascript正则表达式单引号

    我的正则表达式是 var re a z A Z 1 15 我想允许这样 单引号 我怎样才能做到这一点 例如 您可以使用以下正则表达式来允许类似的字符串abcd dfgh A Za z A Za z
  • Canvas GetImageData() / PutImageData() 在移动设备上的性能很糟糕

    我正在做一个小型 HTML5 游戏 在地图开头加载精灵时 我使用 GetImageData 循环遍历所有图像 PutImageData 进行一些处理 这在我的电脑上运行得非常好 但是在我的手机上却慢得可怕 PC 5 6 ms iPhone
  • JQuery:如何仅在完成调整大小后调用 RESIZE 事件?

    浏览器窗口大小调整完毕后 如何调用函数 我正在尝试这样做 但遇到了问题 我正在使用 JQuery Resize 事件函数 window resize function how to call only once the browser ha
  • 在 JS 中动态创建函数

    我正在为 JS 游戏创建 AI 引擎 它是由有限状态机组成的 我正在从 XML 加载状态数及其变量值 我还想加载该行为 并且由于我没有时间创建脚本语言 所以我认为在外部文件 XML 节点内 上 插入 JS 代码并在要求 类似的东西
  • 如何使用javascript获取位于范围内的节点?

    我正在尝试获取范围对象内的所有 DOM 节点 最好的方法是什么 var selection window getSelection what the user has selected var range selection getRang
  • d3.js:将样式应用于单行

    正在尝试可拖动网络 http bl ocks org mbostock 4566102并希望能够对不同的链接使用不同的颜色 当我注释掉这些行时 var link svg append g attr class link selectAll
  • Javascript - 获取和设置基元的属性隐式创建对象包装器

    我正在读一本书 名叫有效的 JavaScript 利用 JavaScript 力量的 68 种具体方法 第 4 点 Prefer Primitives to Object Wrappers 并遇到这句话 获取和设置基元的属性会隐式创建对象
  • Javascript在底部,函数调用在主体?

    只是一个简单的问题 我遵循将所有 Javascript 文件保留在结束正文之前的文档底部的做法 但是我想在主体中调用一个函数 该函数会出现在 JS include 之前 因此失败 有没有办法让这个功能在不将文件移动到头部的情况下工作 Che
  • 如何调用 Numpy 数组中的元素?

    这看起来是一个非常简单的问题 但我找不到答案 如何调用 Numpy 数组中的元素 import numpy as np arr np array 1 2 3 4 5 6 7 8 9 10 print arr 0 0 上面的代码不起作用 只需
  • 使用基于浏览器的 JavaScript 和 Node 操作本地文件系统

    我正在制作一个项目 需要允许用户从浏览器与文件系统进行交互 我在编写客户端 JavaScript 方面拥有丰富的经验 并且在为网页抓取 数据分析和文件系统工作等编写 Node 脚本方面也拥有丰富的经验 但这个项目将允许用户在浏览器中更改内容
  • 对原型绑定感到困惑,这个声明

    在下面的代码中 我想知道上下文如何绑定到this In obj myMethod 上下文被赋予对象 因此记录它会给出对象 In var myFun obj myMethod then myFun 上下文被赋予窗口 唯一的区别是您将函数设置为
  • JS中如何将笛卡尔坐标转换为极坐标?

    我需要使用笛卡尔坐标中的 X 和 Y 来了解极坐标中的旋转角度 How to do it in JS without a lot of IF statements I know that I can do it using 但我认为这对性能
  • Python 将 *args 转换为列表

    这就是我正在寻找的 def init self args list of args magic Parent init self list of args 我需要将 args 传递给单个数组 以便 MyClass init a b c Pa

随机推荐

  • 获取 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