30 seconds of code:用 `unwind` 将 JavaScript 对象的数组属性展开为对象数组
教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载在处理经过聚合aggregation或分组grouping的数据时我们常常得到形如{ key: [v1, v2, ...], ...rest }的结构即对象中某一个属性的值是数组。若后续需要按单条记录进行遍历、渲染或持久化就需要把这种一个对象 一个数组属性的结构**展开unwind**为一个对象数组。本文讲解 30 seconds of code 仓库中unwind-object片段的实现原理、边界情况以及它在仓库中的定位与配套操作。解决什么问题聚合数据的逆操作假设你通过groupBy这类工具把数组按某个键聚合成对象groupBy([one, two, three], length); // { 3: [one, two], 5: [three] }结果中每个键对应的值是数组。而unwind要做的正是相反方向的操作给定一个带数组值属性的对象把它拆平成一个对象数组其中数组属性的每个元素各占一条记录其余属性保持不变。仓库中group-array-elements片段与本文主题互为镜像一个负责聚reduce 收敛为对象一个负责展map 展开为数组二者常在同一数据处理链路中配合使用。核心实现解构排除 map 映射原片段给出了完整实现见unwind-object.mdconst unwind (key, obj) { const { [key]: _, ...rest } obj; return obj[key].map(val ({ ...rest, [key]: val })); }; unwind(b, { a: true, b: [1, 2] }); // [{ a: true, b: 1 }, { a: true, b: 2 }]该实现只用了两个 ES6 特性没有任何循环或临时变量逻辑可以拆解为两步第一步用计算属性名解构排除指定键const { [key]: _, ...rest } obj;[key]是计算属性名解构computed property destructuring表示从obj中取出名为key变量值的那个属性取出的值被丢弃变量命名为_表示我不关心这个值...rest通过**剩余属性rest properties**收集obj中其余所有键值对形成一个不含数组属性的新对象。这一步的关键在于不修改原对象而是通过解构拷贝出除key之外的所有字段为后续展开准备好公共模板。第二步对数组属性执行 mapreturn obj[key].map(val ({ ...rest, [key]: val }));obj[key]是被展开的数组属性Array.prototype.map()对每个元素val生成一个新对象新对象先展开...rest继承原对象的其余字段再通过计算属性名[key]覆盖该属性为当前元素值。map返回的新数组长度与原数组一致因此输出结构天然是一一对应的原对象有 N 个数组元素就得到 N 条对象记录。边界情况与使用注意事项从实现细节可以推导出以下几点需要注意的情形key属性不存在时obj[key]为undefined调用.map()会抛出TypeError。使用时需要确保key存在于对象中或先做存在性校验。key属性值为非数组时同样会因为缺少map方法而报错。该工具约定输入必须是数组值属性若需更宽容的行为可先Array.isArray()判断。对象引用与浅拷贝{ ...rest, [key]: val }是浅拷贝rest中嵌套的对象、数组字段在新对象中仍是原引用。若需要深拷贝应配合结构化克隆structuredClone或深拷贝工具。Symbol 键...rest和计算属性解构均会保留Symbol类型的键可枚举的因此含 Symbol 属性的对象也能正确处理。原对象不被修改整个展开过程只读取obj不会产生副作用符合仓库中 ES6 工具函数的纯函数风格。在仓库中的定位JavaScript 对象工具片段该片段是仓库 JavaScript 片段库的一部分按object标签归入js/object集合。集合通过tagMatcher: object将带有object标签的片段自动聚合其index.yaml描述了这一系列 ES6 辅助函数涵盖基本类型、数组、对象、算法、DOM 操作与 Node.js 工具的整体定位。从片段 frontmattertitle、shortTitle、language、tags、cover、excerpt、listed、dateModified可以看出该仓库的标准化结构这些字段会被src/lib/contentUtils/modelWorkers/snippet.js等模型层解析如excerpt生成摘要、dateModified记录更新日期、listed决定是否公开收录而正文中的代码示例则作为文章的可运行素材呈现。典型应用场景数据规范化将按类别分组的对象还原为平铺的记录列表供表格组件或图表库直接消费接口适配后端返回{ items: [1, 2, 3], meta: {...} }这类结构时展开为[{ items: 1, meta }, { items: 2, meta }, ...]便于前端逐条渲染与聚合操作配对先用groupBy聚合统计再对分组对象按某个数组字段unwind实现分组—展平的数据转换闭环。小结unwind用两行 ES6 代码计算属性解构 剩余属性 map 对象展开解决了对象数组属性展开为对象数组这一高频数据处理问题实现简洁、无副作用、可读性强。使用时只需牢记目标键必须存在且值为数组其余字段会以浅拷贝方式继承到每条展开记录中。完整的片段说明与代码示例可直接查阅content/snippets/js/s/unwind-object.md。赞分享教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载相关推荐30-seconds-of-code将 JavaScript 数组映射为对象的完整实战指南30 seconds of code将 JavaScript 数组映射为对象的完整实战指南 将数组转换为对象array to object mapping教程文档30 seconds of code用 listify 在 JavaScript 对象与对象数组之间自由转换30 seconds of code用 listify 在 JavaScript 对象与对象数组之间自由转换 导读 本指南围绕 30 seconds of c教程文档30 seconds of code 实战用 JavaScript 将 hsl() 颜色字符串转换为数组或对象30 seconds of code 实战用 JavaScript 将 hsl 颜色字符串转换为数组或对象 本篇技术指南源自仓库 content/snippe教程文档上一篇PaddleOCR 3.x 安装指南推理、解析与训练一站式安装及快速验证清单下一篇HTML-Anything「X 帖子卡」Skill 详解用 AI 一键生成拟真 X/Twitter 推文卡片创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

novelWriter 基础格式化与元数据语法指南:@tag 标签、% 注释与章节结构解析

novelWriter 基础格式化与元数据语法指南:@tag 标签、% 注释与章节结构解析

桌面应用 【免费下载链接】novelWriter novelWriter is an open source plain text editor designed for writing novels 项目地址: https://gitcode.com/gh_mirrors/no/novelWriter 点击查看 免费下载 导读:本文以 novelWriter 示例项目(sa…

2026/10/5 10:11:47 阅读更多 →
深入 tldr 的 Windows `history` 别名页:从 PowerShell Get-History 到多语言别名模板

深入 tldr 的 Windows `history` 别名页:从 PowerShell Get-History 到多语言别名模板

文档教程知识库 【免费下载链接】tldr Collaborative cheatsheets for console commands 📚. 项目地址: https://gitcode.com/GitHub_Trending/tl/tldr 点击查看 免费下载 本篇以 tldr 仓库中保加利亚语(bg)的 Windows 命令页 pa…

2026/10/5 10:11:46 阅读更多 →
RStudio IDE 用户指南:文档体系与本地开发全攻略

RStudio IDE 用户指南:文档体系与本地开发全攻略

开发工具后端 【免费下载链接】rstudio RStudio is an integrated development environment (IDE) for R 项目地址: https://gitcode.com/gh_mirrors/rs/rstudio 点击查看 免费下载 导读:RStudio 是面向 R 与 Python 的开源集成开发环境(IDE…

2026/10/5 10:10:46 阅读更多 →

最新新闻

OpenHarmony上Flutter实战:MaterialApp、Scaffold与状态组件核心解析

OpenHarmony上Flutter实战:MaterialApp、Scaffold与状态组件核心解析

刚把 Flutter 工程适配到 OpenHarmony 设备上跑通的时候,我相信很多人跟我的感受一样:环境折腾半天,真正写业务代码时,最常用的还是 MaterialApp、Scaffold 这对“老少组合”,以及绕不开的有状态、无状态组件问题。不少…

2026/10/5 13:50:17 阅读更多 →
OpenShell完全指南:让Windows 10/11找回Win7开始菜单手感

OpenShell完全指南:让Windows 10/11找回Win7开始菜单手感

1. 为什么Windows用户离不开OpenShell 1.1 每个版本的系统都在逼你改变操作习惯 先说点扎心的事实:从Windows 8开始,微软就把开始菜单这颗“老朋友”折腾得不像样子。到了Windows 10,好歹给了个能用的磁贴界面,但很多人真正怀念的…

2026/10/5 13:50:17 阅读更多 →
插件机制全解析:从IAR到播放器,破解插件加载失败之谜

插件机制全解析:从IAR到播放器,破解插件加载失败之谜

“plugins”这个词,你在任何软件生态里逛一圈基本都能撞见。前阵子有人问我,IAR 里的插件到底是干嘛的;紧接着又有人拿着一句 failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p 来求助;没过两天&…

2026/10/5 13:50:17 阅读更多 →
鸿蒙开发实战:SQLite单例封装与数据持久化方案

鸿蒙开发实战:SQLite单例封装与数据持久化方案

1. 项目背景与方案选型思考1.1 会议随记Pro为什么选择SQLite做鸿蒙原生开发的时候,数据持久化是绕不开的一环。我手里这个"会议随记Pro"项目,核心功能是记录会议纪要、议程、待办事项,后来还加了录音转写和标签分类。数据量不算大&…

2026/10/5 13:50:17 阅读更多 →
插件机制与加载失败排查:从did not activate到IAR/Harness实战

插件机制与加载失败排查:从did not activate到IAR/Harness实战

写插件相关的文章,最容易犯的错就是一上来就钻进某个工具的配置界面里,结果被一大堆报错绕晕。最近我连续看到几条很典型的热搜词,比如“failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p”“harness failed to…

2026/10/5 13:50:17 阅读更多 →
插件加载失败怎么排查?从IAR到Harness,一次讲透插件机制与修复方法

插件加载失败怎么排查?从IAR到Harness,一次讲透插件机制与修复方法

前阵子一个朋友给我转来一长串截图,全是同一个主题: harness failed to load plugins web boot: 2 entries did not activate 。扫一眼没头没尾,但类似的报错我在不同工具里见过太多次了。紧接着嵌入式群又有人问“iar plugins 是干什么的”…

2026/10/5 13:49:17 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →