首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在javascript中检索深度嵌套对象时不使用find两次

在JavaScript中检索深度嵌套对象时不使用find两次,可以使用递归函数或者使用其他数组迭代方法来实现。以下是两种常见的方法:

  1. 递归函数方法: 递归函数可以用于遍历深度嵌套对象的所有属性,并找到目标值。可以定义一个递归函数,接收对象和目标值作为参数,并在函数内部进行判断和递归调用。
代码语言:txt
复制
function findValue(obj, target) {
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (typeof obj[key] === 'object') {
        const result = findValue(obj[key], target);
        if (result) {
          return result;
        }
      } else if (obj[key] === target) {
        return obj[key];
      }
    }
  }
  return null;
}

const nestedObj = {
  a: {
    b: {
      c: 'target',
    },
  },
};

const targetValue = findValue(nestedObj, 'target');
console.log(targetValue); // 输出 'target'
  1. 使用其他数组迭代方法: 除了递归函数之外,也可以使用其他数组迭代方法,如reduce、some、every等来实现深度嵌套对象的检索。
代码语言:txt
复制
function findValue(obj, target) {
  const keys = Object.keys(obj);
  const result = keys.reduce((acc, key) => {
    if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
      return acc || findValue(obj[key], target);
    }
    return acc || (obj[key] === target ? obj[key] : null);
  }, null);
  return result;
}

const nestedObj = {
  a: {
    b: {
      c: 'target',
    },
  },
};

const targetValue = findValue(nestedObj, 'target');
console.log(targetValue); // 输出 'target'

以上两种方法都可以在深度嵌套对象中检索目标值,避免了使用find两次的情况。需要注意的是,在使用递归函数时,要处理好循环引用和递归过深导致的性能问题。在使用其他数组迭代方法时,要根据实际情况选择合适的方法和判断条件来实现目标值的检索。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

js 判断数组是否包含某个元素方法集合的原因_怎么判断数组有几个元素

) 方法 5、for 循环和 if 判断 1、JavaScript indexOf() 方法 定义和用法 indexOf() 方法可返回某个指定的字符串值字符串首次出现的位置。...规定需检索的字符串值。 fromindex 可选的整数参数。规定在字符串开始检索的位置。它的合法取值是 0 到 stringObject.length – 1。...开始检索的位置字符串的 fromindex 处或字符串的开头(没有指定 fromindex )。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。...find() 方法为数组的每个元素都调用一次函数执行: 当数组的元素测试条件返回 true , find() 返回符合条件的元素,之后的值不会再调用执行函数。...findIndex() 方法为数组的每个元素都调用一次函数执行: 当数组的元素测试条件返回 true , findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。

6.4K60

【说站】javascript访问不同对象的速度比较

javascript访问不同对象的速度比较 速度比较 1、访问字面量和局部变量的速度最快,而访问数组元素和对象成员相对较慢。 2、访问对象成员,查找的成员原型链位置太深,则访问速度越慢。...提示 应该尽可能的减少对象成员的查找次数和嵌套深度。...实例   // 进行两次对象成员查找   function hasEitherClass(element, className1, className2) {     return element.className... === className1 || element.className === className2;   }   // 优化,如果该变量不会改变,则可以使用局部变量保存查找的内容   function...更多Javascript学习指路:Javascript 推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。 收藏 | 0点赞 | 0打赏

66610
  • multi-key索引和wildCard索引场景比较

    日常工作,有同学对这两种索引的使用场景比较模糊,因此在这里抛砖引玉,供大家借鉴。 Multi-key index multi-key 支持对数组的高效查询。...: multi-key适用于对数组进行索引 不能对数组进行哈希 不支持对嵌套对象进行查询; WildCard index 在上文中,查询数组元素某个字段,就需要对字段单独加索引,用起来很不方便...MongoDB4.2版本引入了wildCard索引,支持对象,数组的检索,并且可以侵入元素内部遍历,非常方便。...侵入查询测试 进一步wildCard索引的数组元素下,添加对象,能否走索引?...使用时,需要注意: multi-key索引主要加快数组遍历,功能纯粹; wildCard可以侵入遍对象或数组内部,避免单属性创建索引,更加灵活; wildCard不会遍历连续嵌套两层以上的数组; 建议太多层嵌套

    1.4K40

    Spring认证中国教育管理中心-Spring Data MongoDB教程六

    使用 编写地理空间查询near(NearQuery),终止方法的数量将更改为仅包括对geoNear MongoDB 运行命令有效的方法(将实体作为GeoResult内获取GeoResults),如以下示例所示...开始使用 Query by Example 之前,您需要有一个域对象。首先,为您的存储库创建一个接口,如以下示例所示: 示例 91....下表描述了各种ExampleMatcher设置的范围: 11.7.4.运行示例 以下示例显示了使用存储库(Person本例对象如何按示例进行查询: 示例 97.... 包含null值ExampleSpec,Spring Data Mongo 使用嵌入式文档匹配而不是点符号属性匹配。这样做会强制对嵌入文档的所有属性值和属性顺序进行精确的文档匹配。...:reduce.js;文件中外部化 JavaScript 代码通常比将它们作为 Java 字符串嵌入到文件更可取您的代码。

    2.8K20

    mongodb 基本概念

    json 对象,属于 json 的一种,称为 bson。...文档字段的值可以包括其他文档,成为内嵌文档,也可以包括数组和文档数据 关于文档存储的优点有这些: 文档 即为对象,对应于许多编程语言中的本机数据类型 嵌入式文档和数组减少了对连接的需求 动态模式支持流畅的多态性...13 “javascript“ Symbol 14 “symbol” JavaScript(with scope) 15 “javascript with scope” 32 - bit integer...关于 mongo db 查询操作,我们可以有如下运算符可以使用 运算符 说明 $eq 等于 $lt 小于 $lte 小于等于 $gt 大于 $gte 大于等于 $in 判断元素是否指定的集合范围里...$all 判断数组是否包含某几个元素,无关顺序 $nin 判断元素是否不在指定的集合范围里 $ne 不等于 $not 匹配结果 $or 有一个条件成立则匹配 $nor 所以条件都不匹配 $and 所有条件都必须匹配

    1.6K30

    前端知识体系整理(不断更新)

    -> 简单类型(参考JavaScript 类型转换) 隐式转换:除Date外,统统是先 valueOf、再 toString(Date + 和 == 优先转化为字串):...比较(参考 全面理解面向对象JavaScript) 基于类Class的面向对象对象由类Class产生:如Java、C# javascript:基于原型prototype的OOP,对象由构造器...var声明的变量 变量的查找(作用域链):查找函数内部变量 -> 查找嵌套的外部函数 ...-> 查找window对象 -> 未定义 js没有块级作用域,可以用匿名函数模拟 未用关键字var申明的变量...DOM树缓慢 html最小化:html大小直接关系到下载速度,移除内联的css,javascript,甚至模板片,有条件的话尽可能压缩html,去除注释、空行等无用文本 总是设置文档字符集:如果设置...$('div'); // document.getElementsByTagName 类选择器低版本浏览器较慢,伪元素、属性选择器不支持querySelector的浏览器很慢 尽可能优先使用符合CSS

    1.6K20

    技术干货| 一文读懂如何查询 MongoDB 文档

    如果想检索集合的所有文档,可以 find 方法传一个空文档作为查询过滤条件。...1.4 AND 条件 可以指定文档的多个字段作为查询条件。查询语句中使用 AND 连接多个查询条件来检索集合满足所有查询条件的文档。...db.inventory.find( { dim_cm: { $gt: 25 } } ) 3.2 多条件查询数组的元素 使用多条件查询数组的元素,可以查询语句中指定单个数组元素满足所有查询条件还是多个数组的元素联合满足所有条件...{ $gt: 25 } } ) 3.6 使用数组长度来检索 使用 $size 操作符通过数组的元素个数来进行检索。...} ) 4.3 指定多个条件检索数组嵌套文档 当对数组嵌套文档多个字段指定查询条件的时候,可以查询语句中指定单个文档满足这些查询条件或者是数组多个文档联合(单个文档)满足这些查询条件。

    4K10

    MySQL8 中文参考(八十三)

    在这个快速入门指南中: 基本对象包括: 对象形式描述dbdb是分配给当前活动模式的全局变量。当您想对模式运行操作,例如检索集合,您可以使用db变量可用的方法。...在下面的示例,modify()方法使用搜索条件标识要更改的文档,然后set()方法替换了嵌套的 demographics 对象的两个值。...要这样做,请使用remove("true")方法,而指定搜索条件。 注意 删除文档,请谨慎操作,指定搜索条件会删除集合的所有文档。...注意 指定搜索条件的情况下删除记录要小心;这样做会删除表的所有记录。 删除表 dropCollection() 方法也可用于 MySQL Shell 从数据库删除关系表。...在这个快速入门指南中: 基本对象包括: 对象形式描述dbdb 是分配给当前活动模式的全局变量。当您想对模式运行操作,例如检索集合,您可以使用db变量可用的方法。

    14210

    软件测试面试题 —— 整理与解析(5)

    深拷贝会复制源对象的所有层级的数据,包括嵌套对象、内部对象等,深拷贝会复制源对象的所有层级的数据,包括嵌套对象、内部对象等;浅拷贝只复制源对象的最外层数据,不会复制嵌套对象本身,而是复制它们的引用,复制的结果包含了原对象和其内部嵌套对象的引用...,因此这两个对象之间仍然共享相同的嵌套对象。...一般使用索引都是因为其可以加速数据的检索,因为如果不使用索引的数据进行查找时数据库需要进行全表扫描,逐行查找匹配的数据,如果这种情况大型数据表中将会非常的耗时。...粘包指的是发送方将数据发送给接收方,将多个小数据包组合成一个大数据包,或者接收方接收到的数据无法准确划分出每个数据包的情况;拆包则是相反情况,指的是接收方接收到的数据无法区分多个数据包。...另外一点,统计的过程与开发保持良好的沟通也是至关重要的,因为业务代码避免不了多次迭代,那么大家编写的测试框架也一定会有着一些改动,这些改动两次之间好像没有什么大的变化,但是一旦出现了多次迭代之后没有及时优化

    20210

    玩转 JavaScript 正则表达式

    我们常用的开发工具,如Fiddler Willow、WebStorm、Vim,正则表达式也能帮助我们方便的进行Find&Replace的工作。...多说两句: 创建变量,对于布尔、数值、字符串、null和undefined这个五个原始值类型来说,原始类型优于封装对象,原因如下。...使用不严格相等运算符也是一样。 s1 == s2; // false 2、ES5规范,就像[],{}这样的对象直接量一样,程序运行时每次碰到RegExp直接量都会创建新对象。...:”形式的分组编码 锚字符 字符 匹配 ^ 匹配字符串的开头,多行检索,匹配一行的开头 $ 匹配字符串的结尾,多行检索,匹配一行的结尾 \b 匹配一个单词的边界,简而言之,就是位于字符\w和字符...一个字符串执行匹配检索,与String.macth()非全局检索类似,返回一个数组或null。 test() 参数:字符串。

    4.2K00

    玩转JavaScript正则表达式

    多说两句: 创建变量,对于布尔、数值、字符串、null和undefined这个五个原始值类型来说,原始类型优于封装对象,原因如下。...使用不严格相等运算符也是一样 s1 == s2; // false 2、ES5规范,就像[],{}这样的对象直接量一样,程序运行时每次碰到RegExp直接量都会创建新对象。...当使用“aaa”作为匹配字符串,/a+/会匹配它的三个字母。但是/a+?...:”形式的分组编码 锚字符 字符 匹配 ^ 匹配字符串的开头,多行检索,匹配一行的开头 $ 匹配字符串的结尾,多行检索,匹配一行的结尾 \b 匹配一个单词的边界,简而言之,就是位于字符\w和字符...一个字符串执行匹配检索,与String.macth()非全局检索类似,返回一个数组或null。 test() 参数:字符串。

    1.4K50

    玩转JavaScript正则表达式

    多说两句: 创建变量,对于布尔、数值、字符串、null和undefined这个五个原始值类型来说,原始类型优于封装对象,原因如下。...使用不严格相等运算符也是一样 s1 == s2; // false 2、ES5规范,就像[],{}这样的对象直接量一样,程序运行时每次碰到RegExp直接量都会创建新对象。...当使用“aaa”作为匹配字符串,/a+/会匹配它的三个字母。但是/a+?...:”形式的分组编码 锚字符 字符 匹配 ^ 匹配字符串的开头,多行检索,匹配一行的开头 $ 匹配字符串的结尾,多行检索,匹配一行的结尾 \b 匹配一个单词的边界,简而言之,就是位于字符\w和字符...一个字符串执行匹配检索,与String.macth()非全局检索类似,返回一个数组或null。 test() 参数:字符串。

    1.1K30

    19 个 JavaScript 编码小技巧

    声明变量 函数声明变量,像下面这样同时声明多个变量可以节省你大量的时间和空间: Longhand: ? Shorthand: ? 如果存在 这可能是微不足道的,但值得提及。...对象属性 定义对象文字(Object literals)让JavaScript变得更有趣。ES6提供了一个更简单的办法来分配对象的属性。如果属性名和值一样,你可以使用下面简写的方式。...箭头函数 经典函数很容易读和写,但它们确实会变得有点冗长,特别是嵌套函数调用其他函数还会让你感到困惑。 Longhand: ? Shorthand: ?...默认参数值 你可以使用if语句来定义函数参数的默认值。ES6,可以函数声明定义默认值。 Longhand: ? Shorthand: ?...Array.find 如果你以前写过一个查找函数,你可能会使用一个for循环。ES6,你可以使用数组的一个新功能find()。 Longhand: ? Shorthand: ?

    81440

    50道JavaScript详解面试题,你需要了解一下

    答案是输出为10,因为将对象传递给函数对象相似,仅传递其值,而传递对内存位置的实际引用。这就是为什么更改仅影响函数范围内的参数的原因。 3、控制台输出是什么?...在这种情况下,由于我们两次定义了相同的变量,因此,会在控制台上引发错误。 但是,如果我们使用var定义相同的变量,则控制台将返回50 。同样,使用const定义变量,我们将得到相同的错误。...6、数组对象JavaScript的原始对象吗? JavaScript,我们处理的大多数事物都是对象,类似地,数组只是JavaScript的特殊对象,它们具有其他对象所没有的属性。...17、JavaScript使用事件委托 例如,当我们必须侦听页面加载期间可能不存在的事件,可以使用事件委托,并在父元素上提供事件处理程序并查看event.target。...不可以,因为字符串JavaScript是不可变的,指向字符串的变量可以分配给另一个字符串。 21、承诺链嵌套捕获可以捕获承诺链向上抛出的错误吗?

    3.5K40

    Salesforce Javascript(三) 小结1

    JavaScript 的字符串可用双引号 "", 单引号 '', 或 模板字面量 `` 定义。...Function 与 Scope 函数我们日常开发中极其常见。我们函数声明时通常使用两种。函数声明式 以及 函数表达式, 除了这两种情况我们还可以使用 构造函数方式声明一个函数。...你可以一个函数里面嵌套另外一个函数。嵌套(内部)函数对其容器(外部)函数是私有的。它自身也形成了一个闭包。一个闭包是一个可以自己拥有独立的环境与变量的表达式(通常是函数)。...既然嵌套函数是一个闭包,就意味着一个嵌套函数可以”继承“容器函数的参数和变量。换句话说,内部函数包含外部函数的作用域。 可以总结如下: 内部函数只可以在外部函数访问。...通过结果可以发现当我们使用函数表达式和函数声明式方式情况下,使用当前scope的变量,当我们使用构造函数方式声明的函数继承当前的scope,需要使用全局的变量。

    57631
    领券