簡體   English   中英

Lodash groupby嵌套數組

[英]Lodash groupby nested array

我試圖使用Lodash的groupBy函數來重塑嵌套數組。

我得到了書店數據,在那里我檢索了包含其標題和作者列表的書籍列表。

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

輸入和所需輸出的完整示例

然后我想按作者分組這些書。 一本書屬於許多作者,我們尋求扭轉關系(后來我也通過隸屬關系和作者對它們進行分組,但讓我們在開始時保持簡單)

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

我的問題是groupBy不接受一系列類別來對項目進行分組。我需要找到一個替代解決方案。

答案由Datalib供應商提供給我

標准的JavaScript數組函數

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

替代方案

使用json-groupby

const groupBy = require('json-groupby');

// create a temporary array `authors`
  byBook.forEach(function(item) {
      item.authors = item.author.map(function(x) {
         return x.family;
      })
  });

// groupby authors
  byAuthor= groupBy(byBook, ['authors']);

// delete the temporary array
  Object.keys(byAuthor).forEach(function (key){
    byAuthor[key].forEach(function (item){
      delete item.authors
    });
  });

這個lib允許在d3.js之上構建多個分組參數,並且速度非常快。 也許你可以從中受益

https://github.com/vega/datalib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM