
本教程旨在详细介绍如何在j*ascript中将一个包含多个json对象的数组转置为一个新的对象,其中新对象的键是原对象中的所有属性名,而值则是对应属性名在所有原对象中的值组成的数组。我们将通过一个高效且易于理解的函数实现这一常见数据转换需求。
在数据处理和前端开发中,我们经常会遇到需要对数据结构进行转换的场景。一个典型的例子是将“行式”数据(即每个对象代表一行记录)转换为“列式”数据(即每个键对应一列数据)。
原始数据结构示例: 假设我们有一个JSON对象数组,每个对象都代表一条记录,包含 name、date、id 和 priority 等属性:
const data = [
{name: 'Alex', date: '05/17/2025 10:32 PM', id: '00153168', priority: '3-Medium'},
{name: 'Peter', date: '05/17/2025 11:32 PM', id: '00153169', priority: '3-Medium'}
];目标数据结构示例: 我们希望将其转换为以下形式,其中每个键(如 name)对应一个数组,该数组包含了所有原始对象中该键的值:
{
name : ['Alex','Peter'],
date : ['05/17/2025 10:32 PM','05/17/2025 11:32 PM'],
id: ['00153168','00153169'],
priority: ['3-Medium', '3-Medium']
}这种转换在数据分析、图表渲染或特定UI组件的数据绑定时非常有用。
我们将实现一个名为 transpose 的函数来完成上述数据结构转换。该函数的核心思想是遍历原始对象数组,然后针对每个对象的键值对,将其值按原始对象在数组中的索引位置存入目标对象的对应键的数组中。
/**
* 将对象数组转置为键值数组对象。
* 该函数能处理不规则对象,即原始对象不要求所有键都相同,
* 缺失的值将在结果数组中体现为 undefined。
*
* @param {Array<Object>} list 待转置的对象数组。
* @returns {Object} 转置后的键值数组对象。
*/
function transpose(list) {
const result = {}; // 初始化结果对象
// 遍历原始对象数组中的每一个对象
for (let i = 0; i < list.length; i++) {
// 遍历当前对象的每一个键值对
for (const [key, value] of Object.entries(list[i])) {
// 使用空值合并运算符 (??=) 确保 result[key] 是一个数组。
// 如果 result[key] 不存在或为 null/undefined,则初始化为空数组 []。
// 然后将当前值 value 存入该数组的第 i 个位置。
// 这种方式天然地处理了不规则对象,如果某个对象缺少某个键,
// 对应位置在后续的迭代中会被填充或保持 undefined。
(result[key] ??= [])[i] = value;
}
}
return result;
}让我们使用之前定义的 data 数组来测试 transpose 函数:
const data = [
{name: 'Alex', date: '05/17/2025 10:32 PM', id: '00153168', priority: '3-Medium'},
{name: 'Peter', date: '05/17/2025 11:32 PM', id: '00153169', priority: '3-Medium'}
];
/**
* 将对象数组转置为键值数组对象。
* 该函数能处理不规则对象,即原始对象不要求所有键都相同,
* 缺失的值将在结果数组中体现为 undefined。
*
* @param {Array<Object>} list 待转置的对象数组。
* @returns {Object} 转置后的键值数组对象。
*/
function transpose(list) {
const result = {};
for (let i = 0; i < list.length; i++) {
for (const [key, value] of Object.entries(list[i])) {
(result[key] ??= [])[i] = value;
}
}
return result;
}
const transposedData = transpose(data);
console.log(transposedData);输出结果:
{
name: [ 'Alex', 'Peter' ],
date: [ '05/17/2025 10:32 PM', '05/17/2025 11:32 PM' ],
id: [ '00153168', '00153169' ],
priority: [ '3-Medium', '3-Medium' ]
}处理不规则对象: transpose 函数的一个显著优点是它能优雅地处理原始数组中对象结构不一致的情况。例如:
百度文心百中
百度大模型语义搜索体验中心
251
查看详情
const irregularData = [
{name: 'Alex', id: '001', priority: 'Medium'},
{name: 'Peter', date: '2025-01-01', id: '002'} // Peter对象缺少priority
];
const transposedIrregularData = transpose(irregularData);
console.log(transposedIrregularData);输出将会是:
{
name: [ 'Alex', 'Peter' ],
id: [ '001', '002' ],
priority: [ 'Medium', undefined ], // Peter对应的priority为 undefined
date: [ undefined, '2025-01-01' ] // Alex对应的date为 undefined
}这种行为通常是符合预期的,因为它保留了数据的原始位置信息,即使某个属性在特定对象中缺失。
性能考量: 该方法的复杂度为 O(N*M),其中 N 是原始对象数组的长度,M 是所有对象中平均键的数量。对于大多数常见的数据集,这种性能是完全可以接受的。
替代方法: 虽然 transpose 函数简洁高效,但也可以使用 reduce 方法来实现类似的功能,代码可能会稍微紧凑,但理解上可能不如双层 for 循环直观。然而,对于这种特定需求,当前提供的 transpose 函数是一个非常优秀的解决方案。
本教程详细介绍了如何使用J*aScript将一个对象数组转置为一个键值数组对象。通过 transpose 函数,我们能够高效且健壮地实现这一数据转换,即使面对不规则的数据结构也能妥善处理。掌握这种数据转置技巧,将有助于您在处理复杂数据场景时更加游刃有余。
以上就是J*aScript:高效实现对象数组到键值数组的转置的详细内容,更多请关注其它相关文章!
# 有什么
# 本溪大型网站优化公司
# 拉萨全网营销推广的好处
# 标准化网站优化服务外包
# 网站建设选什么公司
# 银行怎样用营销产品推广
# seo作用排名
# 房山抖音seo团队
# 元氏参考网站优化系统
# 牟平网站优化报价
# 山东seo培训获客软件
# 将其
# 将在
# 这一
# javascript
# 象中
# 运算符
# 遍历
# 组中
# 数据结构
# 键值
# red
# 键值对
# 前端开发
# json
# 前端
# js
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
酷狗音乐多音轨设置教程
解决Pandas DataFrame高度碎片化警告:高效创建多列的策略
京东物流快递破损了怎么办_京东快递破损理赔流程
韩小圈网页版PC端入口 韩小圈网页版官方网站入口
12306售票时间最新规定 | 网上订票和车站窗口时间一样吗
AO3中文入口稳定分享_AO3官网HTTPS看文详解
《360浏览器》自动保存账号密码设置方法
解决CSS布局中意外顶部空白问题的教程
电脑开不了机怎么办 电脑无法开机的解决方法
宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?
《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局
《海豚家》注销账号方法
电脑视频号|直播|如何分享屏幕
在PySimpleGUI中实现键盘按键绑定按钮事件
苹果手机聊天记录删除了如何恢复
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】
太平年在哪个平台播出
哔哩哔哩在线观看入口 B站官网免费进入
Pandas中基于动态偏移量实现DataFrame列值位移的策略
Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能
如何测试您的网站全球打开速度-网站海外测速工
汽水音乐官方网站登录入口_汽水音乐网页版进入链接
多闪电脑版下载_多闪PC端模拟器使用
解决jQuery多计算器输入字段冲突的教程
Dagster资产间数据传递与用户配置管理教程
抖音作品被限流怎么办 抖音内容优化与流量恢复方法
J*aScript二进制处理_ArrayBuffer与Blob
芒果TV官网登录入口 芒果TV官方网站登录入口
使用TinyButStrong生成HTML并结合Dompdf创建PDF教程
123网页端官方登录页 123邮箱网页版即时通讯服务
在Dash应用中自定义HTML标题和网站图标
《三角洲行动》战斗步枪与机枪类改装代码分享
B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】
谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达
智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法
SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南
学习通网页版课程打不开_课程无法访问时的解决方法
mysql怎么导入sql文件_mysql导入sql文件的方法与技巧
性能与资源监视器快捷打开
作业帮网页版不用下载入口 在线问老师快速答疑
PDF如何批量加注释_PDF多文件批注高亮操作教程
windows10怎么开启卓越性能_windows10电源选项代码激活
深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析
晓晓优选app支付宝绑定方法
《海贝音乐》均衡器设置方法
《虎扑》关闭社区内容推荐方法
Golang如何测试结构体方法_Golang reflect方法测试与调用技巧
TikTok视频播放中断怎么办 TikTok播放异常修复方法
5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备
2025-11-30
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。