Lodash groupby嵌套数组

时间:2017-08-02 18:59:59

标签: javascript json lodash

我正在尝试使用Lodash的groupBy函数来重塑嵌套数组。

我获得了书店数据,在那里我检索了书籍列表及其标题和作者列表。

 [
     {
        "title": "",
        "author": [
          {
            "given": "",
            "family": "",
            "affiliation": []
          },
          {
            "given": "",
            "family": "",
            "affiliation": []
          }
         ]
      },{
        "title": "",
        "author": [
          {
            "given": "",
            "family": "",
            "affiliation": []
          },
          {
            "given": "",
            "family": "",
            "affiliation": []
          }
         ]
      }
    ]

Full example with input and desired output

然后我想按作者分组这些书。一本书属于许多作者,我们寻求扭转这种关系  (后来我也通过隶属关系和作者对它们进行分组,但让我们在开始时保持简单)

result = _.groupBy(result, function(item) {
   return _.map(item.author,'given')
});

我的问题是groupBy不接受一系列类别来对项目进行分组。我需要找到一个替代解决方案。

2 个答案:

答案 0 :(得分:1)

Datalib contributer

向我提供的答案

标准JavaScript数组函数

regex101

替代解决方案

使用json-groupby

var byAuthor = books.reduce(function(authors, book) {
  book.author.forEach(function(author) {
    var name = author.family;
    var booksByAuthor = authors[name] || (authors[name] = []);
    booksByAuthor.push(book);
  });
  return authors;
}, {});

答案 1 :(得分:0)

这个lib允许在d3.js之上构建多个分组参数,并且速度非常快。也许你可以从中受益

https://github.com/vega/datalib