简体   繁体   English

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

[英]Create array of objects from another array of objects

(Sorry for the title) (对不起标题)

What is the best way to turn this:最好的方法是什么:

[
    {
      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']
    }
  ]

Into this:进入这个:

[
  {
    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',
  }]

And then back again...然后又回来了……

I receive data in a certain structure, then I need to create a task list for each file.我以某种结构接收数据,然后我需要为每个文件创建一个任务列表。 Then convert it back to it's original structure.然后将其转换回其原始结构。 I'm sure there will be some clever ES6 way of doing this but I can't figure it out.我敢肯定会有一些聪明的 ES6 方法来做到这一点,但我想不通。

a very crude implementation would be:一个非常粗略的实现是:

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]
    };
  }));
}, []);

There are probably much cleaner solutions out there.那里可能有更清洁的解决方案。 what I did was a simple array Zip implementation.我所做的是一个简单的数组 Zip 实现。

you can check more about zipping here: How do I zip two arrays in JavaScript?您可以在此处查看有关压缩的更多信息: 我如何在 JavaScript 中使用 zip 两个 arrays?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM