从另一个对象数组创建对象数组



(对不起标题(

什么是最好的方法来扭转这种局面:

[
{
directory: 'video_0',
files: [ 'comp_0.mp4', 'comp_1.mp4' ],
uploadedFiles: ['video_0/comp_0.mp4','video_0/comp_1.mp4']
},
{
directory: 'video_1',
files: [ 'comp_0.mp4', 'comp_1.mp4' ],
uploadedFiles: ['video_1/comp_0.mp4','video_1/comp_1.mp4']
},
{
directory: 'video_2',
files: [ 'comp_0.mp4', 'comp_1.mp4' ],
uploadedFiles: ['video_2/comp_0.mp4','video_2/comp_1.mp4']
}
]

进入:

[
{
file: 'comp_0.mp4',
directory: 'video_0',
uploadedFile: 'video_0/comp_0.mp4',
},
{
file: 'comp_1.mp4',
directory: 'video_0',
uploadedFile: 'video_0/comp_1.mp4',
},
{
file: 'comp_0.mp4',
directory: 'video_1',
uploadedFile: 'video_1/comp_0.mp4',
},
{
file: 'comp_1.mp4',
directory: 'video_1',
uploadedFile: 'video_1/comp_1.mp4',
},
{
file: 'comp_0.mp4',
directory: 'video_2',
uploadedFile: 'video_2/comp_0.mp4',
},
{
file: 'comp_1.mp4',
directory: 'video_2',
uploadedFile: 'video_2/comp_1.mp4',
}]

然后又回来了。。。

我接收特定结构的数据,然后我需要为每个文件创建一个任务列表。然后将其转换回原来的结构。我相信ES6会有一些聪明的方法来做到这一点,但我想不通。

一个非常粗糙的实现是:

const data = [
{
directory: 'video_0',
files: ['comp_0.mp4', 'comp_1.mp4'],
uploadedFiles: ['video_0/comp_0.mp4', 'video_0/comp_1.mp4']
},
{
directory: 'video_1',
files: ['comp_0.mp4', 'comp_1.mp4'],
uploadedFiles: ['video_1/comp_0.mp4', 'video_1/comp_1.mp4']
},
{
directory: 'video_2',
files: ['comp_0.mp4', 'comp_1.mp4'],
uploadedFiles: ['video_2/comp_0.mp4', 'video_2/comp_1.mp4']
}
];
const newArr = data.reduce((p, c) => {
return p.concat(c.files.map((file, i) => {
return {
directory: c.directory,
file,
uploadedFile: c.uploadedFiles[i]
};
}));
}, []);

可能有更清洁的解决方案。我所做的是一个简单的数组Zip实现。

您可以在这里查看更多关于压缩的信息:如何在JavaScript中压缩两个数组?

最新更新