
本文将介绍如何在 J*aScript 中,针对一个包含日期和时间信息的对象,将特定元素从数组中取出并移动到另一个数组,同时避免修改原始数据。我们将通过 Object.values()、flat() 和 reduce() 方法来实现这一目标,确保数据的完整性和可维护性。
解决方案:使用 Object.values()、flat() 和 reduce()
核心思路是将对象的所有值(即数组)提取出来,然后将这些数组扁平化为一个单一的数组。最后,使用 reduce() 方法,根据每个对象的 day 属性,将它们重新组合成一个新的对象。这样,原始对象就不会被修改。
代码实现
假设我们有以下数据结构:
Waifulabs
一键生成动漫二次元头像和插图
317
查看详情
const days = {
"monday": [{
"day": "monday",
"type": "open",
"value": 43200
},
{
"day": "monday",
"type": "close",
"value": 75600
}
],
"tuesday": [{
"day": "tuesday",
"type": "open",
"value": 43200
},
{
"day": "tuesday",
"type": "close",
"value": 75600
}
],
"wednesday": [{
"day": "wednesday",
"type": "open",
"value": 43200
},
{
"day": "wednesday",
"type": "close",
"value": 75600
}
],
"thursday": [{
"day": "thursday",
"type": "open",
"value": 43200
},
{
"day": "thursday",
"type": "close",
"value": 75600
}
],
"friday": [{
"day": "friday",
"type": "open",
"value": 36000
}],
"saturday": [{
"day": "friday",
"type": "close",
"value": 3600
},
{
"day": "saturday",
"type": "open",
"value": 36000
}
],
"sunday": [{
"day": "saturday",
"type": "close",
"value": 3600
},
{
"day": "sunday",
"type": "open",
"value": 43200
},
{
"day": "sunday",
"type": "close",
"value": 75600
}
]
}
const result = Object.values(days).flat().reduce((acc, o) => {
(acc[o.day] ??= []).push(o);
return acc;
}, {});
console.log(result);代码详解
- Object.values(days): 这个方法提取 days 对象的所有值,返回一个包含所有数组的数组。
- .flat(): 这个方法将上一步返回的数组扁平化为一个单一的数组,其中包含了所有的时间对象。
-
.reduce((acc, o) => { ... }, {}): reduce() 方法用于遍历扁平化后的数组,并构建一个新的对象。
acc: 累加器,用于存储最终结果。初始值是一个空对象 {}。- o: 当前正在处理的数组元素(即一个时间对象)。
- (acc[o.day] ??= []).push(o): 这行代码是核心逻辑。它首先检查累加器 acc 中是否已经存在以当前时间对象的 day 属性为键的数组。如果不存在,则使用空数组 [] 初始化该键的值。然后,将当前时间对象 o 推入到对应的数组中。 ??= 是空值合并赋值运算符,相当于 acc[o.day] = acc[o.day] || []。
- return acc: 返回更新后的累加器,用于下一次迭代。
优点
- 不可变性 (Immutability): 此方法不会修改原始的 days 对象,而是创建一个新的对象 result。
- 简洁性: 代码简洁易懂,使用了现代 J*aScript 的特性。
- 灵活性: 可以轻松地适应不同的数据结构,只要对象中包含 day 属性即可。
注意事项
- 此方法依赖于 Object.values()、flat() 和空值合并赋值运算符 ??=,这些都是 ES2019 及更高版本引入的特性。如果需要在旧版本的 J*aScript 环境中使用,可能需要使用 polyfill 或替代方案。
- 确保对象中的每个元素都包含 day 属性,否则可能会导致意料之外的结果。
总结
通过使用 Object.values()、flat() 和 reduce() 方法,我们可以高效且安全地将数组中的元素移动到另一个数组,同时保持数据的不可变性。这种方法在处理复杂数据结构时非常有用,可以提高代码的可维护性和可读性。
立即学习“J*a免费学习笔记(深入)”;
以上就是J*aScript:如何在不改变原数组的情况下,将数组中的元素移动到另一个数组的详细内容,更多请关注其它相关文章!
# java
# red
# 数据结构
# 累加器
# 组中
# 运算符
# 如何在
# 不改变
# javascript
# 平谷网站建设建站
# 汕尾如何优化网站营销
# 舟山建筑网站建设
# 揭阳seo优化批发
# 杭州seo优化排名公司
# 珠宝营销推广的思路
# 浙江营销推广拍摄平台
# 保定制造行业网站建设
# 德州网站运营推广
# 浏阳学校网站建设方案
# 如何使用
# 管理器
# 自定义
# 情况下
相关栏目:
【
企业资讯168 】
【
行业动态20933 】
【
网络营销52431 】
【
网络学院91036 】
【
运营推广7012 】
【
科技资讯60970 】
相关推荐:
将HTML Canvas内容转换为可上传的图像文件(File对象)
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
React Hooks最佳实践:动态组件状态管理的组件化方案
CSS Box Model与弹性按钮:维持布局稳定的动画实践
如何使用 Excel 发布器与 Power BI 分享 Excel 洞察
J*aScript生成器_j*ascript异步迭代
mysql备份恢复性能优化_mysql备份恢复性能优化方法
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
HTML长属性值处理:表单action路径优化与代码规范应对
c++中为什么推荐使用using替代typedef_c++现代化类型别名
UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】
解决深度学习模型训练初期异常高损失与完美验证准确率问题
css如何实现简易弹出层_使用position和z-index实现遮罩弹层
J*aScript中如何高效提取对象指定属性
马斯克:Optimus 人形机器人复数形式为 Optimi
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
EMS快递官网app_中国邮政速递物流手机客户端
在Pyomo中实现基于变量的条件约束:Big-M方法详解
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
12306选座怎么选到商务座_12306商务座选择与配置说明
CSS布局中意外空白:解决padding-top导致的顶部间距问题
Go RPC HTTP服务正确实现与常见陷阱解析
j*a toString()的覆盖
顺丰快件物流信息 官方网站查询入口
包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑
Android Studio计算器C键功能异常排查与修复教程
ArrayList与LinkedList操作复杂度详解:遍历与修改
163邮箱登录密码 163邮箱忘记密码找回
Log4j Console Appender性能瓶颈与高并发优化策略
J*aScript实现单选按钮与关联输入框的联动禁用教程
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
J*a递归快速排序中静态变量的状态管理与陷阱


acc: 累加器,用于存储最终结果。初始值是一个空对象 {}。