【JavaScript】如何压缩和解压数组

两个或多个数组的 Zipping,这就像把不同口袋里的零食倒在一起,拼成一盒豪华版“数组什锦礼包”。想象一下

const arrays = [['a', 'b'], [1, 2], [true, false]];
const zipped = [['a', 1, true], ['b', 2, false]]; 

瞧,现在是不是觉得Zipping这个概念像是在玩一场数组元素的交换游戏呢?就差开派对庆祝了!

压缩数组

压缩数组需要创建一个数组,长度为参数中最长数组的长度。我们可以使用 Math.max() 和展开运算符 (...) 来获取数组中最长的子数组,然后使用 Array.from() 来创建适当长度的数组。

然后,我们可以使用 Array.prototype.map(),为新数组的每个元素创建一个数组。每个数组的长度就是传递给函数的参数个数。使用 Array.from() 中的最后一个参数,我们可以映射原始数组的索引,并用该索引处的元素创建一个新数组.

const zip = (...arrays) => {const maxLength = Math.max(...arrays.map(x => x.length));return Array.from({ length: maxLength }).map((_, i) => {return Array.from({ length: arrays.length }, (_, k) => arrays[k][i]);});
};zip(['a', 'b'], [1, 2], [true, false]); // [['a', 1, true], ['b', 2, false]]
zip(['a'], [1, 2], [true, false]); // [['a', 1, true], [undefined, 2, false]]

解压数组

压缩 的逆操作是解压,它将数组的数组重新转换为独立的数组。我们可以使用Math.max() 函数和扩展运算符(...)来获取数组中最长的子数组,然后利用Array.from()方法创建一个适当长度的新数组。

接下来,通过使用Array.prototype.reduce()Array.prototype.forEach()方法,我们可以通过将每个值推送到相同索引处的数组中,从而将分组的值映射到各个独立的数组上。

const unzip = arr =>arr.reduce((acc, val) => (val.forEach((v, i) => acc[i].push(v)), acc),Array.from({length: Math.max(...arr.map(x => x.length))}).map(x => []));unzip([['a', 1, true], ['b', 2, false]]); // [['a', 'b'], [1, 2], [true, false]]
unzip([['a', 1, true], ['b', 2]]); // [['a', 'b'], [1, 2], [true]]

将数组压缩为对象

若要将数组zip 成一个对象,您可以采用与数组压缩类似的技术。唯一的区别在于您需要使用Array.prototype.reduce()方法来将键值对分配给对象。

const zipObject = (props, values) =>props.reduce((obj, prop, index) => ((obj[prop] = values[index]), obj), {});zipObject(['a', 'b', 'c'], [1, 2]); // {a: 1, b: 2, c: undefined}
zipObject(['a', 'b'], [1, 2, 3]); // {a: 1, b: 2}

将对象解压缩到数组

将对象解压为一对数组的操作相对简单。您可以利用Object.keys()Object.values()方法分别获取该对象作为数组形式的键和值。

const unzipObject = obj => [Object.keys(obj),Object.values(obj)
];unzipObject({a: 1, b: 2, c: 3}); // [['a', 'b', 'c'], [1, 2, 3]]
unzipObject({a: 1, b: 2}); // [['a', 'b'], [1, 2]]

尾记

该文章参考于30secondsofcodezip-array-into-object

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/680178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一下,我使用stm32实现pwm波输入,以及对频率和占空比的计算,同时通过串口输出(实现-重要)

1,首先看下半物理仿真 看下我的配置: 看下计算方法以及matlab的仿真输出的数据: timer3的ch2是选择高电平,计算频率 timer3的ch1是选择的是低电平,用来计算周期 其中TemPIpre表示的是CH2输出的值, TemPI…

用HTML5 + JavaScript绘制花、树

用HTML5 JavaScript绘制花、树 <canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。 <canvas> 标签/元素只是图形容器&#xff0c;必须使用脚本来绘制图形。 HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112…

Linux--常用命令(详解)

详细目录 一、终端命令格式二、显示文件列表命令-ls2.1作用2.2格式2.3 ls常用选项2.3.1 ls -a2.3.2 ls -l(等价于 ll)2.3.2 ls -h 三、相对路径与绝对路径3.1绝对路径3.2相对路径 四、目录操作命令 -cd4.1作用4.2格式4.3案例4.3.1 cd -&#xff1a; 返回上一次所在目录4.3.2 cd…

使用maven命令安装Oracle的jar包到本地仓库

mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc6 -Dversion11.2.0.4 -Dpackagingjar -DfileD:\ojdbc6-11.2.0.4.jar ojdbc6-11.2.0.4.jar 下载 链接&#xff1a;https://pan.baidu.com/s/1SqO3Ug7KF8kGr9-jOy3MJQ 提取码&#xff1a;36p9

Dockerfile和.gitlab-ci.yml文件模板

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

如何控制系统安全 或 控制流氓软件

电脑 出入数据的地方是安全保障的最后一关 比如 网络 , usb 等等 控制联网流氓软件 1 在虚拟机里测试软件是否有恶意行为 恶意行为非常容易发现 比如 破坏文件 修改文件 系统不正常 像蓝屏 等等 2 网络防火墙 这是系统最关键的部分之一 像 windows 一定使用他…

「Linux」用户操作

root用户 su&#xff1a;切换账户 语法&#xff1a;su [–] [用户名] -&#xff1a;可选&#xff0c;表示是否在切换用户后加载环境变量&#xff0c;建议带上用户名&#xff1a;表示要切换的用户&#xff0c;省略时表示切换到root切换用户后&#xff0c;通过exit命令退回上一个…

服务异步通信

服务异步通信 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失…

CTFSHOW web 89-100

这边建议去我的gitbook或者github看观感更好(图片更完整) github:https://github.com/kakaandhanhan/cybersecurity_knowledge_book-gitbook.22kaka.fun gitbook:http://22kaka.fun 🏈 CTFSHOW PHP特性 (1)WEB 89 ①代码解释 <?php/* # -*- coding: utf-8 -*- # @…

使用Nacos实现服务发现

启动Nacos cd nacos cd bin ./startup.sh -m standalone浏览器访问http://localhost:8848 账号密码都是nacos 修改配置文件 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifact…

第二篇【传奇开心果微博系列】Python微项目技术点案例示例:成语接龙游戏

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展整体思路四、玩家输入示例代码五、成语判断示例代码六、回答判断示例代码七、电脑判断示例代码八、游戏结束示例代码九、界面优化示例代码十、扩展成语库示例代…

面试经典150题——长度最小的子数组

​"In the midst of winter, I found there was, within me, an invincible summer." - Albert Camus 1. 题目描述 2. 题目分析与解析 首先理解题意&#xff0c;题目要求我们找到一个长度最小的 连续子数组 满足他们的和大于target&#xff0c;需要返回的是子数组的…

架构篇34:深入理解微服务架构 - 银弹 or 焦油坑?

文章目录 微服务与 SOA 的关系微服务的陷阱小结 微服务是近几年非常火热的架构设计理念&#xff0c;大部分人认为是 Martin Fowler 提出了微服务概念&#xff0c;但事实上微服务概念的历史要早得多&#xff0c;也不是 Martin Fowler 创造出来的&#xff0c;Martin 只是将微服务…

传统架构向微服务架构迁移思路

改造的第一步不是改 梳理业务、重新认知系统、重新建模微服务拆分的规划 先解决主要矛盾不做过长远的规划(初期不要拆得太细) 基础设施(监控、自动化运维等)可以带着弄起来了 论改造的复杂 改造需要过程 好的架构师演进出来的,不是设计出来的 从哪里开始改造? 架构改造的几个…

论文介绍 One-step Diffusion 只需单步扩散生成!

论文介绍 One-step Diffusion with Distribution Matching Distillation 关注微信公众号: DeepGo 源码地址&#xff1a; https://tianweiy.github.io/dmd/ 论文地址&#xff1a; https://arxiv.org/abs/2311.18828 这篇论文介绍了一种新的图像生成方法&#xff0c;名为分布匹配…

一、Docker/安装包部署ClickHouse

Docker/安装包部署ClickHouse 一、docker部署1.安装Docker2.拉取ClickHouse镜像2.1 选择拉取版本2.2 拉取镜像 3.启动ClickHouse3.1 确定好挂载目录3.2 测试环境3.3 生产环境3.1.1 获取配置文件3.1.2 配置文件中添加用户3.1.3 启动容器 4.使用DBeaver连接 二、安装包安装1.准备…

【JavaScript】事件处理(添加事件监听器、事件对象)

文章目录 1. 添加事件监听器通过 HTML 属性通过 JavaScript 2. 事件对象事件处理函数参数阻止默认行为停止事件传播 3. 总结 在前端开发中&#xff0c;事件处理是 实现交互和响应用户行为的重要环节。JavaScript 提供了丰富的事件处理机制&#xff0c;本篇博客将介绍如何通过 …

springboot/ssm在线作业管理系统Java大学生作业提交成绩管理系统

springboot/ssm在线作业管理系统Java大学生作业提交成绩管理系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql …

Seurat - 聚类教程 (1)

设置 Seurat 对象 在本教程[1]中&#xff0c;我们将分析 10X Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上对 2,700 个单细胞进行了测序。可以在此处[2]找到原始数据。 我们首先读取数据。 Read10X() 函数从 10X 读取 cellranger 管道的输出&…

Java实现陕西非物质文化遗产网站 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…