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

在JS中减少具有深度文字键的对象数组

可以通过使用递归和遍历对象的方式来实现。以下是一个示例代码:

代码语言:txt
复制
function reduceDeepArray(obj) {
  if (Array.isArray(obj)) {
    return obj.map(reduceDeepArray);
  } else if (typeof obj === 'object') {
    return Object.keys(obj).reduce((acc, key) => {
      const value = obj[key];
      if (typeof value === 'object' && !Array.isArray(value)) {
        const reducedValue = reduceDeepArray(value);
        if (Object.keys(reducedValue).length !== 0) {
          acc[key] = reducedValue;
        }
      } else {
        acc[key] = value;
      }
      return acc;
    }, {});
  } else {
    return obj;
  }
}

// 示例用法
const deepArray = [
  {
    name: 'John',
    age: 30,
    details: {
      address: {
        street: '123 Main St',
        city: 'New York',
        country: 'USA'
      },
      occupation: 'Developer'
    }
  },
  {
    name: 'Jane',
    age: 25,
    details: {
      address: {
        street: '456 Oak Ave',
        city: 'Los Angeles',
        country: 'USA'
      },
      occupation: 'Designer'
    }
  }
];

const reducedArray = reduceDeepArray(deepArray);
console.log(reducedArray);

上述代码通过递归地遍历对象数组,将具有深度文字键的对象数组进行简化。输出结果如下:

代码语言:txt
复制
[
  {
    name: 'John',
    age: 30,
    details: {
      address: {
        street: '123 Main St',
        city: 'New York',
        country: 'USA'
      }
    }
  },
  {
    name: 'Jane',
    age: 25,
    details: {
      address: {
        street: '456 Oak Ave',
        city: 'Los Angeles',
        country: 'USA'
      }
    }
  }
]

在这个例子中,我们使用递归函数reduceDeepArray来遍历对象数组。当遇到数组时,我们使用map函数递归调用reduceDeepArray来处理每个数组元素。当遇到对象时,我们使用reduce函数来遍历对象的键,并根据键的值进行处理。如果值是对象并且不是数组,则递归调用reduceDeepArray来简化该对象。最后,返回简化后的对象。

这种方法可以有效地减少具有深度文字键的对象数组,并保留只包含非空子对象的层次结构。

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

相关·内容

JS特殊对象-数组

所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合,那么这个集合我们就称之为数组。...特别注意:JS不像PHP,没有关联数组. 1.2 获取数组元素 // 格式:数组名[下标] 下标又称索引 // 下标从0开始 // 功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined..."pink"; 1.5 数组操作案例 案例1:求数组所有数和 //求和 var arr = [10, 20, 30, 40, 50]; //定义变量存储和 var sum = 0; for (var...arr = [10, 20, 30, 40, 50, 60]; //假设这个变量值是最大 var maxNum = arr[0]; //遍历数组 for (var i = 0; i < arr.length...){ console.log(arr[i]); } } 案例4:将数组转为字符串并以 | 分割 //把数组每个名字后面拼接一个|然后以字符串方式输出 var names =

9.1K00
  • 前端基础-JS特殊对象(数组)

    第6章 JS特殊对象-数组 之前学习数据类型,只能存储一个值(比如:Number/String)。我们想在一个变量存储多个值,应该如何存储?...[0]);//undefined 数组元素可以是任意类型数据,因此,有时数组某个元素值又是一个数组,而这样数组被称为多维数组,如果数组只有其他类型数据,而没有另外数组值,这样数组被称为一维数组...; 通常,数组被嵌套N层,则称为N维数组,最常见就是二维数组、三维数组、四维数组,超过一维数组都会被泛称为多维数组数组维度值越大,复杂度就越高,开发尽量避免产生高维度值数组; var arr1..."pink"; 6.5 数组操作案例 案例1:求数组所有数和 //求和 var arr = [10, 20, 30, 40, 50]; //定义变量存储和 var sum = 0; for (var...){ console.log(arr[i]); } } 案例4:将数组转为字符串并以 | 分割 //把数组每个名字后面拼接一个|然后以字符串方式输出 var names =

    3.1K20

    JS 函数 arguments 类数组对象

    1. arguments 介绍 2. arguments 转为数组 3. 箭头函数没有 arguments 1. arguments 介绍 众所周知,js 是一门非常灵活语言。...当我们 js 调用一个函数时,经常会给函数传递一些参数,js 把调用函数时传入全部实参存储到一个叫做 arguments 数组对象里面 arguments 是一个类数组对象,不是一个真正数组...', 'css', 'js']) 通过打印结果可以发现,arguments 原型是 Object,而数组原型是 Array 那么关于 arguments 是什么 ?...这里做下总结 arguments 是类数组对象(伪数组),即不是一个真正数组,而是一个对象。...它有 length 属性,并且可以通过下标获取元素,但是它不能调用数组方法,就是因为它不是真正数组,这一点可以通过查看它原型验证 2. arguments 转为数组 arguments 是类数组对象

    5.4K20

    深度剖析前端JavaScript原型(JS对象原型)

    传统 OOP ,首先定义“类”,此后创建对象实例时,类定义所有属性和方法都被复制到实例。...,你会看到,浏览器将根据这个对象可用成员名称进行自动补全: 在这个列表,你可以看到定义 person1 原型对象、即 Person() 构造器成员—— name、age、gender、interests...在这个例子中发生了如下过程: 浏览器首先检查,person1 对象是否具有可用 valueOf() 方法。...如果没有,则浏览器检查 person1 对象原型对象(即 Person构造函数prototype属性所指向对象)是否具有可用 valueof() 方法。...注意:没有官方方法用于直接访问一个对象原型对象——原型链“连接”被定义一个内部属性 JavaScript 语言标准中用 [[prototype]] 表示(参见 ECMAScript)。

    1.1K30

    js数组添加数据方式js数组对象添加属性和属性值

    参考:https://www.cnblogs.com/ayaa/p/14732349.html js数组添加数据方式有以下几种: 直接利用数组下标赋值来增加(数组下标起始值是0) 例,先存在一个有...(5,8,9); console.log(arr);  此时输出结果是[ 1, 2, 3, 5, 8, 9 ]; 通过 数组名.unshift(参数)来增加从数组第1个数据开始参数,unshift可以带多个参...用 数组名.splice(开始插入下标数,0,需要插入参数1,需要插入参数2,需要插入参数3……)来增加数组数据 let arr=[1,2,3]; //splice(第一个必需参数:该参数是开始插入...\删除数组元素下标,第二个为可选参数:规定应该删除多少元素,如果未规定此参数,则删除从 第一个参数 开始到原数组结尾所有元素,第三个参数为可选参数:要添加到数组新元素) let result=arr.splice...(3,0,7,8,9) console.log(arr);  此时输出结果是[ 1, 2, 3, 7, 8, 9 ]; 因为举例是从第3个下标开始,所以是直接在数组最后开始增加数组内容; js数组对象添加属性和属性值

    23.4K20

    Js数组对象某个属性值升序排序,并指定数组某个对象移动到数组最前面

    需求整理:   本篇文章主要实现是将一个数组对象属性值通过升序方式排序,然后能够让程序可以指定对应数组对象移动到程序最前面。...: 23},{name: "小芳", Id: 18}];   首先把数组Id值通过升序方式排序: //源数组 var arrayData= [{name: "夏明", Id:24}, {name:..., Id: 24 },{ name: "小红", Id: 25 }] 找到Id为23对象,移动到数组最前面去(注意Id值唯一): 实现原理:因为移除数组对象需要找到对应数组对象下标索引才能进行移除...,现在我们需要移除Id=23对象,让其排到最前面去(先找到对象下标,然后把给数组对象赋值给temporaryArry临时数组,然后通过下标移除newArrayData对象值,最后将arrayData...[currentIdx]); //移除数组newArrayId=23对象 newArrayData.splice(currentIdx,1);//从start[一般为对象索引]位置开始向后删除

    12.3K20

    分享 5 种 JS 访问对象属性方法

    JavaScript 对象是语言基本组成部分,广泛用于表示数据结构。对象由保存值属性组成。为了访问这些属性,JavaScript 提供了多种方法。...本文中,我们将探索5种不同方式来访问 JavaScript 对象属性。 1.点属性 点属性访问器是 JavaScript 访问对象属性最常见和最直接方式。它使用点 (.)...2.方括号属性 方括号属性访问器是另一种 JavaScript 访问对象属性方法。它使用方括号 ([]) 和属性名称字符串表示来访问值。...我们还可以使用对象解构来使用别名将属性分配给具有不同名称变量。...const { [propertyName]: propertyValue } = person; console.log(propertyValue); // Output: 30 在这里,我们在对象解构语法中使用方括号表示法来动态访问具有存储

    1.7K31

    深度学习人脸检测应用 | CSDN 博精选

    随后研究者将深度学习应用在人脸检测领域,主要集中基于卷积神经网络(CNN)的人脸检测研究,如基于级联卷积神经网络的人脸检测(Cascade CNN)、基于多任务卷积神经网络的人脸检测(MTCNN)、Facebox...图 2 缩放滑动窗口 基于深度学习的人脸检测算法,针对不同大小人脸主要也有两个策略,但和传统人脸检测算法有点区别,主要包括: 缩放图片大小:不过也可以通过缩放滑动窗方式,基于深度学习滑动窗人脸检测方式效率会很慢存在多次重复卷积...当然这只是估计位置,具体构建网络时要加入回归框预测,主要是相对于原图框一个平移与缩放。...剩余窗口输入到 12-calibration-net 调整大小和位置,以接近真实目标。接着输入到 NMS ,消除高度重叠窗口。下面网络与上面类似。...权衡之后,将 Conv1, Pool1, Conv2 和 Pool2 核大小分别设为 7x7,3x3,5x5,3x3。 使用 CReLU 来保证输出维度不变情况下,减少卷积核数量。

    1.1K00

    PHP中使用SPL库对象方法进行XML与数组转换

    PHP中使用SPL库对象方法进行XML与数组转换 虽说现在很多服务提供商都会提供 JSON 接口供我们使用,但是,还是有不少服务依然必须使用 XML 作为接口格式,这就需要我们来对 XML...我们客户端生成了 SimpleXMLIterator 对象,并传递到 xmlToArray() 方法。... phpToXml() 代码,我们还使用了 get_object_vars() 函数。就是当传递进来数组项内容是对象时,通过这个函数可以获取对象所有属性。...如果将对象看做是一个数组的话,每个属性值就是它键值对。 在对每个键值遍历时,我们判断当前键对应内容是否是数组或者是对象。如果不是这两种形式内容的话,就直接将当前内容添加为当前结点子结点。...测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/PHP中使用SPL库对象方法进行XML与数组转换

    6K10

    【性能优化】面试官:Java对象数组都是堆上分配吗?

    关于面试题 标题中面试题为:Java对象数组都是堆上分配吗?...面试官这样问,有些小伙伴心里会想:我从一开始学习Java时,就知道了:Java对象堆上创建对象引用是存储到栈,那Java对象数组肯定是堆上分配啊!难道不是吗? ?...JVM即时编译语境下,逃逸分析将判断新建对象是否逃逸。即时编译判断对象是否逃逸依据:一种是对象是否被存入堆(静态字段或者堆对象实例字段),另一种就是对象是否被传入未知代码。...对象可能分配在栈上 JVM通过逃逸分析,分析出新对象使用范围,就可能将对象栈上进行分配。栈分配可以快速地栈帧上创建和销毁对象,不用再将对象分配到堆空间,可以有效地减少 JVM 垃圾回收压力。...所以,并不是所有的对象数组,都是堆上进行分配,由于即时编译存在,如果JVM发现某些对象没有逃逸出方法,就很有可能被优化成栈上分配。

    2.1K30

    探讨可解释深度学习技术医疗图像诊断应用

    图 3 所示特征图用于验证此特性。特征图(a)白皙皮肤具有较高激活度,而特征图(b)具有血管样结构粉红色皮肤上具有高激活度。 图 3....近年来,深度学习方法医学图像分类或分割等任务应用取得了成功,但在特征提取和决策过程仍然缺乏可解释性,这就限制了深度学习方法临床诊断价值。...图 2 右侧图中给出了 ED 和 ES 阶段所选对象原始片段、对应 VAE 重建结果,以及潜在空间导航方法四个不同迭代下重建片段。...这个问题在医疗图像诊断是非常重要,因为支持诊断结论推理判别性图像特征报告是 "潜伏" ,而不是由特定图像 / 对象标签明确提供。...MDNet 为可解释深度学习技术医疗图像诊断应用提供了一个新视角:生成诊断报告和与报告对应网络关注(Network Attention),借助于注意力机制使得网络诊断和决策过程具有语义和视觉上可解释性

    69010

    硬货 | 一了解深度学习NLP最佳实践经验和技巧

    模型深度 NLP中用到神经网络模型已变得越来越深,尽管目前还不及计算机视觉领域中用到那么深。...用于特定任务上模型层数甚至可以更深,可参考GoogleNMT模型,具有8层编码器和解码器 。然而,大多数情况下,模型层数超过2层之后继续加深模型所带来性能提升是很小 。...可以看看这篇博来了解有关MTL更多信息。 辅助目标 我们通常可以找到一些对任务有用辅助目标 。...当解码器向量dh维数较小时,这两种性能差不多;而维数较大时,会出现加法式注意力机制表现更好情况,此时通过将 缩小至 倍可以减少这种情况发生。...近期发现,由于CNN模型具有高效卷积运算,它也同样适用于序列类型任务。下面是一些与CNN模型相关最佳实践,以及超参数上最佳选择。

    84540

    从零开始构建React Native数字键盘功能

    React Native应用字键使用场景 React Native应用,有许多专业字键盘使用场景。 一个常见例子是一次性密码(OTP)输入验证。...在这种情况下,我们想要显示一个由十二个值组成数组,这些值被排列一个三列四行网格。 pinLength — 用户应输入PIN码长度。...数组空白 "" 值使我们可以使渲染三列四行数字键盘在视觉上更加平衡。 在数字键盘上,我们使空白按钮不能被按压,并移除了它背景色。我们还为数组对应 X 值按钮渲染了一个删除图标。...首先,组件文件夹创建一个 DialpadPin.js 文件,并在 CustomDialPad 组件渲染它。... DialpadPin.js 文件,我们将根据我们之前设定 4 PIN长度渲染一个 View 。

    29210

    【深入理解JS核心技术】1. JavaScript 创建对象可能方式有哪些?

    创建对象方式: 创建空对象,可以使用Object构造函数。...(对象构造函数) var object = new Object(); 复制代码 可以使用Objectcreate方法通过将原型对象作为参数来创建一个新对象 var object = Object.create...(这是创建对象最简单方法) var object = {} 复制代码 函数构造函数,创建任何函数并使用new运算符来创建对象实例 function Person (name) { this.name...constructor(name) { this.name = name; } } var object = new Person('哪吒'); 复制代码 单例模式 Singleton 是一个只能被实例化一次对象...对其构造函数重复调用返回相同实例,这样可以确保它们不会意外创建多个实例。

    1.2K10
    领券