首页 > 解决方案 > 将多个动态数组合并为一个对象数组

问题描述

抱歉标题令人困惑,我有一个问题,我有 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。

标签: javascriptarraysobject

解决方案


如果您将输入存储为一个对象,其中属性名称是您作为变量名称的名称,那么这是一种方法:

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 个数组,可能具有不同的名称。


推荐阅读