# 数组解压

使用 lodash _.unzip 拆分分组数组

> 标准页面: https://elysiatools.com/zh/tools/unzip-arrays

- **分类:** Data Processing

- **关键词:** 数组, 解压, 分组, 拆分, lodash

## 概述

将分组数组拆分为多个数组。

**亮点：**
- 使用 lodash `_.unzip`
- 输入为分组数组的 JSON
- 与 zip 输出相配合

**示例：**
- 分组：`[["a", 1], ["b", 2]]`
- 结果：`[["a", "b"], [1, 2]]`

## 输入项

- **分组数组** (textarea): 输入分组值的 JSON 数组

## 适用场景

- 当您有一个由键值对组成的数组（如 `\[\["name", "Alice"\], \["age", 30\]\]`），需要将其分离为独立的键数组和值数组时。
- 当您需要将按行组织的数据（如 CSV 的每一行）转换为按列组织的数据时。
- 当您处理完数据并使用了 `zip` 操作进行合并后，需要反向操作以恢复原始的分组结构时。

## 工作原理

- 工具接收一个有效的 JSON 数组作为输入，该数组的每个元素本身也是一个数组（即分组数组）。
- 内部调用 lodash 的 `_.unzip` 函数处理输入数据。
- 函数将输入数组中每个子数组的第一个元素归为一组，第二个元素归为另一组，依此类推。
- 最终输出一个包含多个新数组的 JSON 数组，每个新数组由原始分组数组中相同位置的元素构成。

## 使用案例

- 从 API 返回的键值对数组中，快速提取所有的键（字段名）和所有的值，用于生成表头或进行数据映射。
- 处理表格数据时，将按行存储的数据（如 `\[\["姓名", "年龄"\], \["张三", 25\], \["李四", 30\]\]`）转换为按列存储的格式，便于进行列向分析。
- 在数据处理流水线中，作为 `zip` 操作的逆向步骤，用于重组或还原之前被合并的数据结构。

## 常见问题

### 输入数据有什么格式要求？

输入必须是一个有效的 JSON 数组，且该数组的每个元素也必须是数组（例如 `[[1, "a"], [2, "b"]]`）。不支持非数组元素或无效的 JSON。

### 输出结果是什么样的？

输出是一个新的 JSON 数组。例如，输入 `[["a", 1], ["b", 2]]`，输出将是 `[["a", "b"], [1, 2]]`。

### 如果子数组长度不一致会怎样？

`_.unzip` 会以最长的子数组长度为准进行处理，长度不足的子数组在对应位置会用 `undefined` 填充。

### 使用这个工具需要编程知识吗？

不需要。您只需将符合格式的 JSON 数据粘贴到输入框，工具会自动处理并显示结果。

### 这个工具和“数组压缩（zip）”有什么关系？

它们是互逆操作。“数组压缩（zip）”将多个数组按位置合并为一个分组数组，而“数组解压（unzip）”则将一个分组数组拆回为多个数组。

## 相关工具

- [按键分组](https://elysiatools.com/zh/tools/group-by): 使用 lodash _.groupBy 按派生键分组
- [数组交集](https://elysiatools.com/zh/tools/intersection-arrays): 使用 lodash _.intersection 查找多个数组的共同值
- [按值反转](https://elysiatools.com/zh/tools/invert-by): 使用 lodash _.invertBy 按值分组反转
- [数组异或](https://elysiatools.com/zh/tools/xor-arrays): 使用 lodash _.xor 计算数组对称差
- [数组压缩](https://elysiatools.com/zh/tools/zip-arrays): 使用 lodash _.zip 按索引合并数组
- [按键计数](https://elysiatools.com/zh/tools/count-by): 使用 lodash _.countBy 按派生键计数
- [深度扁平化数组](https://elysiatools.com/zh/tools/flatten-deep-array): 使用 lodash _.flattenDeep 完全扁平化数组
- [路径取值](https://elysiatools.com/zh/tools/get-path): 使用 lodash _.get 按路径取值

## 示例

- [Grafana 高级应用示例](https://elysiatools.com/zh/samples/grafana-samples): 全面的 Grafana 示例，涵盖高级仪表板设计、告警配置、数据源集成和插件开发
- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [D3.js 数据可视化示例](https://elysiatools.com/zh/samples/d3js-data-visualization): 全面的D3.js数据可视化示例，包括图表、地图、动画和交互式可视化
- [Rome JavaScript 工具链示例](https://elysiatools.com/zh/samples/rome): Rome JavaScript 工具链示例，包括配置、代码检查、格式化、打包和项目管理
