javascript - 将多个动态数组合并为一个对象数组
问题描述
抱歉标题令人困惑,我有一个问题,我有 3 个动态数组(可以为空):
const titles = ["Title 1", "Title 2", "Title 3"]
const subtitles = ["Subtitle 1", "Subtitle 2"]
const contents = ["Content 1"]
我需要将它们更改为:
const newArr = [
{ title: "Title 1", subtitle: "Subtitle 1", content: "Content 1" },
{ title: "Title 2", subtitle: "Subtitle 2" },
{ title: "Title 3" }
]
我试图解决这个问题:
const newState = []
titles.map((titleItem, index) => { newState[index] = { title: titleItem } });
subtitles.map((subtitleItem, index) => { newState[index] = { subtitle: subtitleItem } });
contents.map((contentItem, index) => { newState[index] = { content: contentItem } });
但遗憾的是,这会覆盖每张地图的 newState。
解决方案
如果您将输入存储为一个对象,其中属性名称是您作为变量名称的名称,那么这是一种方法:
function zip(arg) {
return Object.entries(arg).reduce( (acc, [k, arr]) => {
arr.forEach( (v, i) => (acc[i] = acc[i] || {})[k] = v );
return acc;
}, []);
}
const result = zip({
title: ["Title 1", "Title 2", "Title 3"],
subtitle: ["Subtitle 1", "Subtitle 2"],
content: ["Content 1"]
});
console.log(result);
这允许您在其他配置中合并超过 3 个数组,可能具有不同的名称。
推荐阅读
- typescript - 获取对象的非只读键
- android - 可以在 Android 12 Splash Screen API 中设置图标的宽度
- javascript - 防止 Hidden Bootstrap 4 Modals 对事件做出反应
- html - 由于某种原因,我的方块走到了页面底部
- amazon-web-services - 未应用 AWS 堆栈集实例的覆盖参数
- reactjs - 为什么我的请求在解决后仍处于待处理状态?
- postgresql - Npgsql.NpgsqlException(0x80004005):连接时出现异常:由于目标机器主动拒绝,无法建立连接
- google-calendar-api - 如何更新具有某些豁免的重复事件,但仍保持豁免实例的“已确认”状态?
- image - SwiftUI - 如何使来自不同大小的 URL 的图像适合框架?
- wpf - WPF:绑定到 ObservableCollection 中类的属性