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

如何检索除一个属性/级别之外的嵌套对象数组版本(Javascript)

在JavaScript中,要检索除一个属性/级别之外的嵌套对象数组版本,可以使用数组的filter方法结合递归来实现。

首先,定义一个递归函数来检查对象是否拥有除指定属性/级别之外的嵌套对象数组版本。该函数接收两个参数:要检查的对象和要排除的属性/级别。

代码语言:txt
复制
function filterNestedArray(obj, excludeProp) {
  // 检查对象是否为数组
  if (Array.isArray(obj)) {
    // 使用filter方法过滤掉拥有指定属性/级别的数组元素
    return obj.filter(item => !item.hasOwnProperty(excludeProp));
  }

  // 检查对象是否为对象类型
  if (typeof obj === 'object' && obj !== null) {
    // 使用递归遍历对象的属性,并过滤掉拥有指定属性/级别的属性值
    const newObj = {};
    for (let prop in obj) {
      if (!obj.hasOwnProperty(prop) || prop === excludeProp) continue;
      newObj[prop] = filterNestedArray(obj[prop], excludeProp);
    }
    return newObj;
  }

  // 对于其他类型的值,直接返回
  return obj;
}

然后,可以调用该函数来检索除指定属性/级别之外的嵌套对象数组版本。假设有以下示例对象:

代码语言:txt
复制
const obj = {
  name: 'John',
  age: 30,
  hobbies: ['reading', 'coding', 'swimming'],
  address: {
    street: '123 Main St',
    city: 'New York',
    country: 'USA',
    contacts: [
      {
        name: 'Alice',
        phone: '123456789',
        email: 'alice@example.com'
      },
      {
        name: 'Bob',
        phone: '987654321',
        email: 'bob@example.com'
      }
    ]
  }
};

可以调用函数来检索除contacts属性之外的嵌套对象数组版本:

代码语言:txt
复制
const result = filterNestedArray(obj, 'contacts');
console.log(result);

这将输出如下结果:

代码语言:txt
复制
{
  name: 'John',
  age: 30,
  hobbies: ['reading', 'coding', 'swimming'],
  address: {
    street: '123 Main St',
    city: 'New York',
    country: 'USA'
  }
}

请注意,这里给出的示例代码是一种通用的实现方式,适用于检索除一个属性/级别之外的嵌套对象数组版本。根据具体的业务需求和对象结构,可能需要进行适当的修改和调整。

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

相关·内容

如何JavaScript中访问暂未存在嵌套对象

JavaScript 是个很神奇东西。但是 JavaScript一些东西确实很奇怪,让人摸不着头脑。...Oliver Steele嵌套对象访问模式 这是我个人最爱,因为它使代码看起来干净简单。 我从 stackoverflow 中选择了这种风格,一旦你理解它是如何工作,它就非常吸引人了。...做法是检查用户是否存在,如果不存在,就创建一个对象,这样,下一个级别的键将始终从存在对象访问。 不幸是,你不能使用此技巧访问嵌套数组。...使用数组Reduce访问嵌套对象 Array reduce 方法非常强大,可用于安全地访问嵌套对象。...除了安全访问嵌套对象之外,它还可以做很多很棒事情。

8K20

正则表达式之javascript

1.正则表达式定义 描述字符模式对象JavaScriptRepExp类表示正则表达式 var pattern = new RegExp("s$"); var pattern = /s$...换行符和其他Unicode行终止符之外任意字符 \w 任何ASCII字符组成单词,等价于[a-zA-Z0-9] \W 任何非ASCII字符组成单词,等价于[^a-zA-Z0-9] \s 任何...只组合,把项组合到一个单元,但不记忆与改组相匹配字符 \n 和第n个分组第一次匹配字符相匹配,组是圆括号中子表达式(也可能是嵌套),组索引是从左到右左括号数,(?...是一个只读布尔值,用以说明正则表达式是否带有修饰符m lastIndex:是一个可读/写整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串下一次检索开始位置,会被exec(),test(...)方法用到 RegExp方法 exec() 执行字符串匹配检索,类似String.match(),都会返回一个数组 test() 当调用exec方法返回不为null则调用test方法返回为true

79230
  • 玩转JavaScript正则表达式

    RegExp方法 方法 意义 exec() 参数:字符串。在一个字符串中执行匹配检索,与String.macth()非全局检索类似,返回一个数组或null。 test() 参数:字符串。...返回true or false toString() 转换成字符串形式 关于RegExp对象属性和方法多说两句: RegExp对象属性index包含了发生匹配字符位置,属性input引用是正在检索字符串...ES5中,正则表达式直接量每次计算都会创建一个RegExp对象,每个新RegExp对象具有各自lastIndex属性,这势必会大大减少“残留”lastIndex属性对程序造成意外影响。...>中能够出现 引用文本(被单引号或双引号包裹) 非引用形式“其他文本”(包括除了>和引号之外任何字符) 引用文本:HTML中引文可以用双引号,也可以用单引号,但不允许嵌套转义引号。...要将[^"]改为[^\\"] 上面的正则表达式使用了JavaScript正则表达式并不兹瓷逆序环视,这里给出JavaScript支持版本

    1.1K30

    玩转JavaScript正则表达式

    RegExp方法 方法 意义 exec() 参数:字符串。在一个字符串中执行匹配检索,与String.macth()非全局检索类似,返回一个数组或null。 test() 参数:字符串。...返回true or false toString() 转换成字符串形式 关于RegExp对象属性和方法多说两句: RegExp对象属性index包含了发生匹配字符位置,属性input引用是正在检索字符串...ES5中,正则表达式直接量每次计算都会创建一个RegExp对象,每个新RegExp对象具有各自lastIndex属性,这势必会大大减少“残留”lastIndex属性对程序造成意外影响。...>中能够出现 引用文本(被单引号或双引号包裹) 非引用形式“其他文本”(包括除了>和引号之外任何字符) 引用文本:HTML中引文可以用双引号,也可以用单引号,但不允许嵌套转义引号。...要将[^"]改为[^\\"] 上面的正则表达式使用了JavaScript正则表达式并不兹瓷逆序环视,这里给出JavaScript支持版本

    1.4K50

    玩转 JavaScript 正则表达式

    RegExp方法 方法 意义 exec() 参数:字符串。在一个字符串中执行匹配检索,与String.macth()非全局检索类似,返回一个数组或null。 test() 参数:字符串。...返回true or false toString() 转换成字符串形式 关于RegExp对象属性和方法多说两句: RegExp对象属性index包含了发生匹配字符位置,属性input引用是正在检索字符串...ES5中,正则表达式直接量每次计算都会创建一个RegExp对象,每个新RegExp对象具有各自lastIndex属性,这势必会大大减少“残留”lastIndex属性对程序造成意外影响。...>中能够出现 引用文本(被单引号或双引号包裹) 非引用形式“其他文本”(包括除了>和引号之外任何字符) 引用文本:HTML中引文可以用双引号,也可以用单引号,但不允许嵌套转义引号。...要将[^"]改为[^\\"] 上面的正则表达式使用了JavaScript正则表达式并不兹瓷逆序环视,这里给出JavaScript支持版本

    4.2K00

    你即将使用ES2020新功能

    可选链运算符 当前,如果要访问对象深层嵌套属性,则必须通过很长布尔表达式去检查每个嵌套级别属性。...必须检查每个级别中定义每个属性,直到所需深度嵌套属性为止,如下代码所示: const obj = { prop1: { prop2: { prop3: {...但是,如果在任何级别对象中都有 undefined 或 null 嵌套对象,如果不进行检查,那么程序将会崩溃。...这意味着我们必须检查每个级别,以确保当它遇到 undefined 或 null 对象时不会崩溃。 使用可选链运算符,只需要使用 ?. 来访问嵌套对象。...为了解决对象中 null 和 undefined 值问题,我们提供了可选链运算符来访问属性,而无需检查每个级别可能是 null 还是 undefined。

    95750

    JavaScript(RegExp正则匹配)

    前言 正则表达式是一个描述字符模式对象JavaScriptRegExp对象和String对象定义了使用正则表达式来执行强大模式匹配和文本检索与替换函数方法。...在JavaScript中,正则表达式是由一个RegExp对象表示.当然,可以使用一个RegExp()构造函数来创建RegExp对象, 也可以用JavaScript 1.2中新添加一个特殊语法来创建...,那就是正则表达式属性,它说明是高级模式匹配规则.和其它正则表达式语法不同,属性是在 / 符号之外说明.即它们不出现在两个斜杠之间,而是位于第二个斜杠之后.javascript 1.2支持两个属性....属性 i 说明模式匹配应该是大小写不敏感.属性 g 说明模式匹配应该是全局.也就是说,应该找出被检索字符串中所有的匹配.这两种属性联合起来就可以执行一个全局,大小写不敏感匹配....执行一个全局匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了 _________________________________________ 属性 g 和 i 之外,正则表达式就没有其它像属性一样特性了

    4.3K50

    浅析JavaScript正则表达式

    1.正则表达式定义   正则表达式是一个描述字符模式对象。...换行符和其他Unicode行终止符之外任意字符 \w 任何ASCII字符组成单词,等价于[a-zA-Z0-9] \W 任何非ASCII字符组成单词,等价于[^a-zA-Z0-9] \s 任何Unicode...,注意出现$n则说明匹配子表达式 "javascript".replace(/javascript/gi,"JavaScript"); 3.match(reg) 返回一个由匹配结果组成数组,如果reg...中设置了修饰符g,则返回数组包含字符串中所有匹配结果,若没有g,就不会进行全局检索,只会检索一个匹配。...:是一个只读布尔值,用以说明正则表达式是否带有修饰符m lastIndex:是一个可读/写整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串下一次检索开始位置,会被exec(),test

    1.6K30

    JavaScript正则表达式

    [^\n\r] 换行符与结束符之外任意字符 \w [a-zA-Z0-9] 单词字符(所有的字母) \W [^a-zA-Z0-9] 非单词字符 \s 空白字符 \S 非空白字符 \d [0-9]...,参数必须是正则表达式,返回一个由匹配结果组成数组 在match方法中如果正则表达式设置修饰符g,则返回数组是字符串中所有匹配结果 console.log('JAVA is not JAVAscript...'.match(/java/ig));//['JAVA', 'JAVA'] 如果没有设置g,match()方法不会进行全局检索,只会检索一个匹配,但它也是返回一个数组,此时数组一个元素就是匹配结果...对象属性 RegExp 对象包含5个属性 属性 描述 global 只读布尔值,用于说明表达式是否带有修饰符g ignoreCase 只读布尔值,用于说明表达式是否带有修饰符i lastIndex...属性值,exec()下次检索会从lastIndex属性指示字符处开始检索 var pattern = /java/ig; var text = 'javaScript is not JAVA';

    54720

    HTML、CSS、JavaScript学习总结

    其实,在函数中有一个参数数组对象(arguments),该对象将传递参数都封装在一个数组中。 例: function demo()//定义函数。...另外在JavaScript中对于对象属性和方法引用,有两种情况: – 该对象为静态对象,表示在引用该对象属性或方法时不需要为它创建实例; – 在引用该对象属性和方法时必须为它创建一个实例,叫做动态对象...,”c”];//通方案1 • 组合数组创建 – var objArr = [[new Date()],”abc”,1234];//该数组包含三种数据类型,分别是对象类型,字符串类型和数字类型 • 如何引用元素...– width :返回显示器屏幕宽度。 – availHeight :返回显示屏幕高度 ( Windows 任务栏之外)。...– availWidth:返回显示屏幕宽度 ( Windows 任务栏之外)。

    3.1K20

    JavaScript如何工作:深入V8引擎&编写优化代码5个技巧

    大多数 JavaScript 解释器使用类似字典结构(基于哈希函数)来存储对象属性值在内存中位置,这种结构使得在 JavaScript检索属性值比在 Java 或 C# 等非动态编程语言中计算成本更高...如果 V8 能够很好地预测传递给方法对象类型,它就可以绕过如何访问对象属性过程,而是使用从以前查找到对象隐藏类存储信息。 那么隐藏类和内联缓存概念如何相关呢?...相反,它会转换我们拥有的所有上下文(堆栈,寄存器),以便在执行过程中切换到优化版本上。这是一个非常复杂任务,考虑到除了其他优化之外,V8 最初还将代码内联。 V8 不是唯一能够做到引擎。...如何编写优化 JavaScript 对象属性顺序:始终以相同顺序实例化对象属性,以便可以共享隐藏类和随后优化代码。...这种数组元素访问开销较高。另外,尽量避免预分配大数组。最好是按需增长。最后,不要删除数组元素,这会使键值变得稀疏。 标记值:V8 使用 32 位表示对象和数值。

    1.6K20

    正则表达式大全

    JavaScriptRegExp对象和String对象定义了使用正则表达式来执行强大模式匹配和文本检索与替换函数方法....,而不是在找到第一个之后就停止了 _________________________________________ 属性 g 和 i 之外,正则表达式就没有其它像属性一样特性了.如果将构造函数...除此之外,你用RegExp构造器建立个别正则表达式对象属性,就已经预先定义好了正则表达式 对象静态属性,你可以随时使用它们。...假如匹配成功,exec方法返回一个数组并且更新正则表达式对象属性值和预先定义正则表达式对象、RegExp。如果匹配失败,exec方法返回null。...RegExp属性JavaScript 1.2, NES 3.0以上版本提供 描述:lastIndex 是个别的正则表达式对象属性

    4.6K20

    共享可变状态中出现问题以及如何避免

    通过复制数据避免共享 在开始研究如何避免共享之前,我们需要看一下如何JavaScript 中复制数据。 浅拷贝与深拷贝 对于数据,有两个可复制“深度”: 浅拷贝仅复制对象数组顶层条目。...用 Object.getOwnPropertyDescriptors() 检索可枚举和不可枚举属性。 我们将在本文后面的内容中介绍深拷贝。...背景:JavaScript不变性 JavaScript 具有三个级别的保护对象: Preventing extensions 使得无法向对象添加新属性。但是,你仍然可以删除和更改属性。...其中流行两种是: Immutable.js 提供了不变(版本数据结构,例如 List,Map,Set 和 Stack。 Immer 还支持不可变性和非破坏性更新,但仅适用于普通对象数组。...Immer 有助于非破坏性地更新(可能嵌套)普通对象数组。也就是说,不涉及特殊数据结构。

    1.6K40

    【思维导图】前端开发JavaScript-巩固你JavaScript知识体系

    const声明变量不能直接修改值,但是对于对象数组,却是不受保护可以修改 一个完整javascript实现由3个部分组成:核心ECMAScript,文档对象模型DOM,浏览器对象模型BOM。...() 重新刷新当前页面 navigator 对象 navigator对象包含有关浏览器信息 属性 说明 appName 返回浏览器名称 appVersion 返回浏览器平台和版本信息 cookieEnabled...displayName() 函数内 alert() 语句成功显示出了变量 name 值(该变量在其父函数中声明)。 这个词法作用域例子描述了分析器如何在函数嵌套情况下解析变量名。...字符串方法 属性 说明 search() 检索与正则表达式相匹配值 match() 找到一个或者多个正则表达式匹配 replace() 替换与正则表达式字符串 split() 把字符串分割为字符串数组...正则对象方法 RegExp对象方法 属性 说明 test() 用于检测一个字符串是否匹配某个模式 exec() 该方法用于检索字符串中正则表达式匹配,该函数返回一个数组 [a-z] 匹配小写字母从

    3.2K20

    精读《高性能 javascript

    直接量和局部变量访问速度非常快,数组项和对象成员需要更长时间。局部变量比域外变量快,因为它位于作用域链一个对象中。变量在作用域链中位置越深,访问所需时间就越长。...而且应当小心对待 try-catch 表达式 catch 子句,因为它具有同样效果。嵌套对象成员会造成重大性能影响,尽量少用。 一个属性或方法在原形链中位置越深,访问它速度就越慢。...将集合 length 属性缓 存到一个变量中,在迭代中使用这个变量。如果经常操作这个集合,可以将集合拷贝到数组中。...当连接数量巨大字符串时,数组联合是 IE7 和它早期版本上唯一具有合理性能方法。如果你不关心 IE7 和它早期版本数组联合是连接字符串最慢方法之一。...这些格式和传输技术之外,还有一些准则有助于进一步提高 Ajax 速度: 减少请求数量,可通过 JavaScript 和 CSS 文件打包,或者使用 MXHR。

    1.5K20

    前端开发JavaScript-巩固你JavaScript

    const声明变量不能直接修改值,但是对于对象数组,却是不受保护可以修改 一个完整javascript实现由3个部分组成:核心ECMAScript,文档对象模型DOM,浏览器对象模型BOM。...() 重新刷新当前页面 navigator 对象 navigator对象包含有关浏览器信息 属性 说明 appName 返回浏览器名称 appVersion 返回浏览器平台和版本信息 cookieEnabled...displayName() 函数内 alert() 语句成功显示出了变量 name 值(该变量在其父函数中声明)。 这个词法作用域例子描述了分析器如何在函数嵌套情况下解析变量名。...字符串方法 属性 说明 search() 检索与正则表达式相匹配值 match() 找到一个或者多个正则表达式匹配 replace() 替换与正则表达式字符串 split() 把字符串分割为字符串数组...正则对象方法 RegExp对象方法 属性 说明 test() 用于检测一个字符串是否匹配某个模式 exec() 该方法用于检索字符串中正则表达式匹配,该函数返回一个数组 [a-z] 匹配小写字母从

    2.9K60

    Java快速入门

    文件必须只包含一个public访问基本class(可以包含多个非public级别的class)。 package名字必须和目录一致。 入口方法 App.java ? ? 最终项目结构 ?...最近觉得label是个不错东西,最起码多了一种选择。 方法 Java中所有的赋值和方法调用都是“按值“处理,引用类型值是对象地址,原始类型值是其自身。 Java支持变长方法参数。 ?...访问级别 Java支持四种访问级别:public、private、protected 和 default(默认),类型和接口只能使用public 和 default,成员和嵌套类型可以使用所有,下面简单解释一下...嵌套类 Java支持如下几种嵌套类: nested class,定义在类型内部类型。...装箱和拆箱 Java提供了原始类型对应引用类型,在1.5之后版本还提供了自动装箱和自动拆箱,结合最新版本泛型,几乎可以忽略这块。 ? 注意:自动装箱和自动拆箱是Java提供语法糖。

    92220

    Apache NIFI ExecuteScript组件脚本使用教程

    此方法采用父FlowFile引用,并返回新子FlowFile对象。新创建FlowFile将继承父对象UUID以外所有属性(attribute)。...这意味着,如果你通过API更新FlowFile属性(或以其他方式更改),则会获得对FlowFile新版本新引用(返回引用指向一个对象)。在将FlowFiles传输到关系时,这非常重要。...你必须保留对FlowFile最新版本引用,并且必须传输或删除从session检索或由session创建所有FlowFiles最新版本,否则在执行时会出现错误。...这些方法可以采用单个字符串,或者一个字符串后跟一个对象数组,或者一个字符串后跟一个对象数组后跟一个可抛出对象。第一个用于输出简单日志消息。第二种是当您有一些要记录动态对象/值时使用。...注意,由于StreamCallback是一个对象,因此默认情况下,内容仅对该对象可见。如果需要在write()方法之外使用数据,请使用全局范围更广变量。

    5.7K40

    Effective Java(第三版)——条目十五:使类和成员可访问性最小化

    对于成员(属性、方法、嵌套类和嵌套接口),有四种可能访问级别,在这里,按照可访问性从小到大列出: private——该成员只能在声明它顶级类内访问。...如果一个实例属性是非final,或者是对可变对象引用,那么通过将其公开,你就放弃了限制可以存储在属性能力。这意味着你放弃了执行涉及该属性不变量能力。...即使属性是final,并且引用了一个不可变对象,通过使它公开,你就放弃切换到不存在属性内部数据表示灵活性。 同样建议适用于静态属性,但有一个例外。...虽然引用不能被修改,但引用对象可以被修改,并会带来灾难性结果。 请注意,非零长度数组总是可变,所以类具有公共静态final数组属性,或返回这样一个属性访问器是错误。...在仔细设计一个最小化公共API之后,你应该防止任何散乱类,接口或成员成为API一部分。 除了作为常量公共静态final属性之外,公共类不应该有公共属性

    94440

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

    如果想检索集合中所有文档,可以在 find 方法中传一个空文档作为查询过滤条件。...读隔离新增加于 MongoDB 3.2版本。 对于副本集或者分片副本集查询,读关注允许客户端选择读隔离级别。更多信息可以查看 Read Concern。...下面的案例返回 inventory 集合中数组字段 tags 中有一个元素值是 **"red"** 所有文档: db.inventory.find( { tags: "red" } ) 对数组元素进行检索时候...下面的案例返回匹配文档中 status 和 instock 字段之外所有字段: db.inventory.find( { status: "A" }, { status: 0, instock:...下面的案例返回匹配文档中嵌套文档 size 中 uom 字段外所有字段。

    4K10
    领券