如何从一组复杂的对象中获取一组唯一的属性

斯蒂芬·帕诺维奇(Stefan Paunovic)

我有一个类似于的对象数组

const array = [
{
    documentId: "document1",
    writers: [
        {
            name: "writer1", 
            date: "2017-12-11"
        },
        {
            name: "writer2", 
            date: "2017-12-11"
        }
    ]
},
{
    documentId: "document2",
    writers: [
        {
            name: "writer1", 
            date: "2017-12-11"
        },
        {
            name: "writer3", 
            date: "2017-12-11"
        }
    ]
},
{
    documentId: "document3",
    writers: [
        {
            name: "writer3", 
            date: "2017-12-11"
        },
        {
            name: "writer4", 
            date: "2017-12-11"
        }
    ]
},

我正在尝试提取所有唯一作者的姓名,并将其与他们编写的所有文档匹配,以使最终数组看起来像这样:

const finalArray = [
    {name: "writter1", documents: ["document1", "document2"]},
    {name: "writter2", documents: ["document1"]},
    {name: "writter3", documents: ["document2", "document3"]},
    {name: "writter4", documents: ["document3"]}
]
达什顿

您可以使用Map,以保持作家键然后调用reduce你的阵列上的文件映射到作家,然后调用values()上的Map对象:

const ret = Array.from(array.reduce((acc, val) => {
  val.writers.forEach(({ name }) => {
    let w = acc.get(name) || { name: name, documents: [] };
    w.documents = w.documents.concat(val.documentId);
    acc.set(name, w);
  });
  return acc;
}, new Map()).values());

console.log(ret);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章