Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将多个动态数组合并到单个对象数组中_Javascript_Arrays_Object - Fatal编程技术网

Javascript 将多个动态数组合并到单个对象数组中

Javascript 将多个动态数组合并到单个对象数组中,javascript,arrays,object,Javascript,Arrays,Object,很抱歉,标题令人困惑,我有一个问题,我有3个动态数组(可以为空): 我需要把它们变成: const newArr = [ { title: "Title 1", subtitle: "Subtitle 1", content: "Content 1" }, { title: "Title 2", subtitle: "Subtitle 2" }, { title: "Title 3" } ] 我试图解决这个问题: const newState = [] titles.

很抱歉,标题令人困惑,我有一个问题,我有3个动态数组(可以为空):

我需要把它们变成:

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。

如果将输入存储为对象,其中属性名就是变量名,那么这里有一种方法:

函数zip(arg){
返回Object.entries(arg).reduce((acc[k,arr])=>{
arr.forEach((v,i)=>(acc[i]=acc[i].[k]=v);
返回acc;
}, []);
}
const result=zip({
标题:[“标题1”、“标题2”、“标题3”],
副标题:[“副标题1”、“副标题2”],
内容:[“内容1”]
});

控制台日志(结果)可以通过这种方式解决,对于性能不重要的代码,我发现使用maps cleaner

let titles=[“Title 1”、“Title 2”、“Title 3”]
让副标题=[“副标题1”,“副标题2”]
let contents=[“Content 1”]
const maxLength=Math.max(titles.length、subtitles.length、contents.length);
const resultWithUndefine=数组(maxLength).fill(null)
.map((_,i)=>[标题[i],副标题[i],内容[i])
.map(([title,subtitle,content])=>({title,subtitle,content}));
console.log(resultWithUndefined)
const resultClean=Array(maxLength).fill(null)
.map((_,i)=>[标题[i],副标题[i],内容[i])
.map([标题、副标题、内容])=>
赋值({},
typeof title==“未定义”?{}:{title},
副标题的类型==“未定义”{}:{subtitle},
内容类型==“未定义”?{}:{content},
));

log(resultClean)
那么标签就是变量的名称,它们只是在彼此之后分配的?到目前为止,您尝试了什么?您被卡在了哪里?这基本上应该是一个
for
循环,其中限制是最长数组的长度。对于对象中的每个属性,检查当前索引是否小于相应数组的长度。是的,数组不是静态的,也可以为其中任何一个数组设置空数组,这是一个棘手的部分:/在最大
长度的数组中循环并创建输出。看起来像是某种面试问题,而且非常简单。所有数据都是连续的,或者任何地方都可能出现间隙。如果您希望将[“1”、“2”、“3”]与[“1”、“3”]和[“2”]匹配,这是不可能的,但您只向我们展示了排列阵列的一种可能方式([“1”、“2”、“3”]、[“1”、“2”]、[“1”])。
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 } });