[英]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之上構建多個分組參數,並且速度非常快。 也許你可以從中受益
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.