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

如何展平不同对象的嵌套数组,但只从现有的属性名称中获取值?

展平不同对象的嵌套数组,但只从现有的属性名称中获取值,可以通过递归和迭代的方式来实现。以下是一个可能的解决方案:

  1. 首先,定义一个函数,接受两个参数:要展平的对象和一个可选的前缀参数。
  2. 在函数内部,创建一个空对象来存储展平后的结果。
  3. 使用递归遍历对象的属性,对于每个属性,判断其类型:
    • 如果属性是一个数组,使用迭代遍历数组的每个元素,并将前缀参数与数组索引拼接作为新的前缀传递给递归函数。
    • 如果属性是一个对象,使用递归调用函数,并将前缀参数与属性名称拼接作为新的前缀传递给递归函数。
    • 如果属性是一个基本类型(字符串、数字等),将其添加到结果对象中,属性名称由前缀参数与当前属性名称拼接而成。
  • 最后,返回展平后的结果对象。

以下是一个示例实现的代码:

代码语言:txt
复制
function flattenObject(obj, prefix = '') {
  let result = {};

  for (let key in obj) {
    if (Array.isArray(obj[key])) {
      obj[key].forEach((item, index) => {
        const newPrefix = prefix + key + '[' + index + '].';
        Object.assign(result, flattenObject(item, newPrefix));
      });
    } else if (typeof obj[key] === 'object' && obj[key] !== null) {
      const newPrefix = prefix + key + '.';
      Object.assign(result, flattenObject(obj[key], newPrefix));
    } else {
      result[prefix + key] = obj[key];
    }
  }

  return result;
}

使用示例:

代码语言:txt
复制
const nestedObj = {
  name: 'John',
  age: 30,
  address: {
    street: '123 Main St',
    city: 'New York',
    state: 'NY',
    zip: '10001'
  },
  hobbies: ['reading', 'painting', 'coding']
};

const flattenedObj = flattenObject(nestedObj);
console.log(flattenedObj);

输出结果:

代码语言:txt
复制
{
  'name': 'John',
  'age': 30,
  'address.street': '123 Main St',
  'address.city': 'New York',
  'address.state': 'NY',
  'address.zip': '10001',
  'hobbies[0]': 'reading',
  'hobbies[1]': 'painting',
  'hobbies[2]': 'coding'
}

这个解决方案可以展平任意嵌套层级的对象,并且只从现有的属性名称中获取值。

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

相关·内容

尝鲜 ES2019 新功能

在某些时候,数组元素还是数组,这些类型数组称为嵌套数组。 要取消数组嵌套它们),我们不得不使用递归。现在引入 flat(),可以用一行代码完成。...通常在 JavaScript 数组深度可以为无穷大,或者直到内存不足为止。假设一个数组嵌套深度为3,并且我们仅将其到深度 2,那么主数组仍然会存在一个嵌套数组。 句法 ?...flat()句法 返回值 它返回一个扁平数组。 示例 ? 用 flat() 平一个深度为3嵌套数组,参数深度为3。 如果将参数深度设为2,我们得到: ? 可以看到输出仍然有一个未数组。...flatMap() flatMap() 用于嵌套数组并根据给出像 map() 这样函数更改值。此函数作用于数组并用一个回调函数作为参数。回调函数用于指示数组应该怎样被。...在此例,我们逐个显示 map 和 flatMap 以显示两个函数之间差异。 map() 返回嵌套数组,而flatMap() 输出除了数组外,还与 map 结构相同。

2K40

path是什么意思啊_globalmapper转换投影

左侧(LHS)创建一个初始值JSON数组。投影右侧(RHS)是要为左侧创建JSON数组每个元素投影表达式。在计算左侧和/或右侧时,每个投影类型语义略有不同。...写法说明 []:将子列表到父列表 ....people[*]代表people下所有的元素,people[*].first代表people下所有的元素获取key为first元素值,结果被收集到一个JSON数组,并作为表达式结果返回 虽然...而对于null,是不会添加到最终返回结果数组,所以最终结果只有[2, 3]。 投影 JMESPath表达式可以使用多个投影。...[]会创建一个投影,因此投影右侧任何内容都会投影到新创建平列表

1.9K20
  • Hudi Transformers(转换器)

    SQL 文件配置了这个 hoodie 属性:hoodie.deltastreamer.transformer.sql.file 查询应将源引用为名为“\”表 最终 sql 语句结果用作写入有效负载。...FROM WHERE trip_type='personal_trips'; SELECT * FROM tmp_personal_trips; Flattening转换器 该转换器可以嵌套对象...它通过以嵌套方式为内部字段添加外部字段和 _ 前缀来传入记录嵌套字段。 目前不支持扁平化数组。...示例模式可能如下所示,其中名称是原始源 StructType 嵌套字段 age as intColumn,address as stringColumn,name.first as name_first...下面的示例首先传入记录,然后根据指定查询进行 sql 投影: --transformer-class org.apache.hudi.utilities.transform.FlatteningTransformer

    1.7K20

    JavaScript 权威指南第七版(GPT 重译)(三)

    它按照参数列表顺序处理源对象,因此第一个源对象属性将覆盖目标对象同名属性,第二个源对象属性(如果有的话)将覆盖第一个源对象同名属性。...7.8.2 使用 flat()和flatMap()数组 在 ES2019 ,flat()方法创建并返回一个新数组,其中包含调用它数组相同元素,除了那些本身是数组元素被“”到返回数组。...原始数组本身是数组元素会被那些数组元素不会被。...如果其中任何参数本身是一个数组,则连接数组元素,而不是数组本身。请注意,concat()不会递归数组数组。...,如果你想将一个数组所有元素推到另一个数组,你可以使用展开运算符(§8.3.4)来显式它: a.push(...values); unshift()和shift()方法行为与push()和pop

    23810

    Python itertools 简单介绍和运用例

    前言 最近写 Python 比较多,不可避免地要处理一堆可迭代对象,发现 Python 对于迭代器/生成器支持相较于其它语言来说是更为丰富,所以简单记录一下 itertools 这个内置包几个常见函数...反例如 JS Array 上 map,filter 等操作,它们都会创建一个新数组,但是这点性能其实不值一提,只是锦上添花而已。就像上文说,只是节省无意义内存消耗。...cycle 与 islice 一起使用,重复从一个可迭代对象取出特定个元素。...print(j) 其实当数据比较大时候,它还是会消耗很多内存,所以慎重使用。 product 可以嵌套 for 循环,以下两种写法结果相同。我这里就不把输出粘贴过来了,有点长。...这是一个实例方法,它所在类实现了__getitem__,当坐标无效时会返回一个所有的属性都是 0 或 False 对象,避免进行判空。

    34520

    必知必会8个Python列表技巧

    2 修改列表 2.1 map()使用 Python内置map()函数使得我们可以将某个函数应用到可迭代对象内每一个元素之上。   ...5 检查列表中元素存在情况   有些情况下我们想要检查列表是否存在某个元素,这种时候就可以使用到Pythonin运算符,譬如说我们有一个记录了所有比赛获胜队伍名称列表,当我们想查询某个队名是否已获胜时...7 嵌套列表   有些情况下我们会遇到一些嵌套列表,其每个元素又是各自不同列表,这种时候我们就可以利用列表推导式来把这种嵌套列表,如下面2层嵌套例子: ?...额外补充:   原作者这里考虑到两层嵌套列表,如果是更多层嵌套,就需要有多少层写多少for循环,比较麻烦,其实还有一种更好方法,我们可以使用pip install dm-tree来安装tree这个专门用于嵌套结构库...,可以任意层嵌套列表,使用例子如下: ?

    1.2K10

    必知必会8个Python列表技巧

    2.1 map()使用 Python内置map()函数使得我们可以将某个函数应用到可迭代对象内每一个元素之上。...,可以通过Python切片操作,用::-1来快捷地实现: 图6 5 检查列表中元素存在情况 有些情况下我们想要检查列表是否存在某个元素,这种时候就可以使用到Pythonin运算符,譬如说我们有一个记录了所有比赛获胜队伍名称列表...,就可以参考下面的例子: 图8 7 嵌套列表 有些情况下我们会遇到一些嵌套列表,其每个元素又是各自不同列表,这种时候我们就可以利用列表推导式来把这种嵌套列表,如下面2层嵌套例子: 图...9 额外补充: 原作者这里考虑到两层嵌套列表,如果是更多层嵌套,就需要有多少层写多少for循环,比较麻烦,其实还有一种更好方法,我们可以使用pip install dm-tree来安装tree这个专门用于嵌套结构库...,可以任意层嵌套列表,使用例子如下: 图10 8 检查唯一性 如果你想要查看列表值是否都是唯一值,可以使用Pythonset数据结构特点,譬如下面的例子: 图11 以上就是本文全部内容

    94150

    要跳槽你在备战金九银十了嘛,整理数道Java面试助你拿下offer

    Java Synchronize 通 过 在 对 象 头 设 置 标 记 , 达 到 了 取 锁 和 释 放 锁 。...非 公 主 要 表 取 锁 行 为 上 , 并 非 是 按 照 申 请 锁 时 间 前 后 给 等 待 线 程 分 配 锁 , 每 当 锁 被 释 放 后 , 任 何 一 个...服务消费者,提供者地址列表,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调 用。...服务发现-服务发现工具管理群集中流程和服务如何查找和互相交谈。它涉及一个服务目录,在该 目录中注册服务,然后能够查找并连接到该目录服务。  冗余-分布式系统冗余问题。... 部署复杂性-Devops 技能要求。 3.服务注册和发现是什么意思? Spring Cloud 如何实现? 当我们开始一个项目时,我们通常在属性文件中进行所有的配置。

    83860

    Python必备基础:这些NumPy神操作你都掌握了吗?

    本文简单介绍NumPy模块两个基本对象ndarray、ufunc,介绍ndarray对象几种生成方法及如何存取其元素、如何操作矩阵或多维数组如何进行数据合并与平等。...▲图1-1 获取多维数组元素 获取数组部分元素除通过指定索引标签外,还可以使用一些函数来实现,如通过random.choice函数指定样本中进行随机抽取数据。...会经常遇到需要把多个向量或矩阵按某轴方向进行合并情况,也会遇到情况,如在卷积或循环神经网络,在全连接层之前,需要把矩阵。...这节介绍几种数据合并和方法。 1....因此,深度学习算法,一般都使用向量化矩阵运算。 06 广播机制 广播机制(Broadcasting)功能是为了方便不同shape数组(NumPy库核心数据结构)进行数学运算。

    4.8K30

    经验丰富程序员才知道15种高级Python小技巧

    首先按年龄分类,然后按名字分类,使用operator.itemgetter()列表每个字典获取年龄和名字字段,这样你就会得到想要结果: [ {<!...有些情况下我们想要检查列表是否存在某个元素,这种时候就可以使用到Pythonin运算符,譬如说我们有一个记录了所有比赛获胜队伍名称列表,当我们想查询某个队名是否已获胜时,可以像下面的例子一样:...14.嵌套列表 有些情况下我们会遇到一些嵌套列表,其每个元素又是各自不同列表,这种时候我们就可以利用列表推导式来把这种嵌套列表,如下面2层嵌套例子: nested_list = [[1,2...flat_list = [i for j in nested_list for i in j] print(flat_list) #[1,2,3,4,5,6,7,8,9] 额外补充: 这里考虑到两层嵌套列表...,如果是更多层嵌套,就需要有多少层写多少for循环,比较麻烦,其实还有一种更好方法,我们可以使用pip install dm-tree来安装tree这个专门用于嵌套结构库,可以任意层嵌套列表

    1.2K60

    ES2019 8 个非常有用功能

    可以把它看作是 flat() 高级版本。区别在于 flatMap() 方法把 flat() 与 map() 结合了起来。在数组时,可以调用回调函数。...这样就可以在过程中使用原始数组每个元素。当在对数组进行操作同时又要修改内容时很方便。...这个方法作用很简单。它需要键值对可迭代形式,例如数组或 Map,然后将其转换为对象。...它们通常用于标识对象属性。ES2019 增加了 description 属性。这个属性是只读,无法更改它值。它用来返回给定符号描述。 要牢记两点。首先,创建符号时描述不是必须,而是可选。...第二点是 description 是对符号本身描述。它不是符号标识符。这意味着你不能使用现有的描述(即 description 属性值)来访问现有的符号。

    2.1K20

    Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组复制、维度修改、拼接、分割...)

    ndarray对象属性有: 【示例】查看ndarray对象属性 # 创建一维数组 a = np.array([1, 2, 3, 4]) # 创建二维数组 b = np.random.randint...,包含原始对象中所有属性和值,并且递归地复制所有嵌套对象,而不仅仅是复制表面层次结构。...使用视图,任何对数组修改都将反映在原始数组;而使用复制,则不会影响原始数组。...使用 flatten函数将多维数组变成一维数组 flatten()是NumPy数组对象一个方法,用于将多维数组平成一维数组。...与ravel()方法不同,flatten()方法总是返回数组复制,而不是返回视图。这意味着数组是原始数组副本,对数组任何修改都不会影响原始数组

    7.2K11

    Druid 数据模式设计技巧

    这样可以避免在"sales”表引用相同产品不同行上重复产品名称和类别。 而在 Druid ,通常使用完全数据源,这些数据源在查询时不需要 join。...要在 Druid 获得最佳时间序列数据压缩和查询性能,像时间序列数据库通常那样,按 dimension 标准名称进行分区和排序非常重要。...为了获得最佳性能,请将其首先放在" dimensionsSpec” dimension 列表。 创建其他维度来表示数据其他属性。在时间序列数据库系统,这些通常称为"tag”。...Druid 列具有预先特定类型,而 Druid 暂时不支持嵌套数据。 在 Druid 建模日志数据提示: 如果你预先不知道要有哪些列,可以使用一个空白维度列表,然后自动检测维度列。...如果你嵌套了数据,请使用flattenSpec数据。 如果您日志数据主要具有分析用例,请考虑启用 rollup。

    2.4K10

    python数据科学系列:numpy入门详细教程

    arange则不含终点 磁盘读取特定文件格式 从缓存或字符读入数组 特定库函数创建,例如random随机数包 以上方法,最为常用是方法1、2、5。...三种方法需要接收一个axis参数,如果未指定,则均会先对目标数组至一维数组后再执行相应操作。...04 数组变形 数组变形是指对给定数组重新整合各维度大小过程,numpy封装了4类基本变形操作:转置、、尺寸重整和复制。主要方法接口如下: ?...点击查看大图 ravel和flat功能类似,均返回对数组执行结果,且不改变原数组形状,区别在于: 前者是方法接口,而后者是属性接口, 前者返回对象类型仍然是数组,而后者返回对象类型是专用flatten...由于很多教程因为翻译或语言习惯不同,存在众说纷纭、口径不一问题,有的说axis=0是横轴,有的说是纵向,所以如何理解axis含义可能是很多numpy初学者常见困扰之一,笔者也是如此。

    3K10
    领券