[英]Group Javascript Array Using Lodash
Transaction.ts
export class Transaction {
id: string;
category: Category = new Category();
totalPrice: number;
}
類別.ts
export class Category {
id: string;
name: string;
}
我有一個Transaction
數組,如下所示。
id:"1"
category: {id: "1", name: "Plumber"}
totalPrice: 500
id:"2"
category: {id: "1", name: "Plumber"}
totalPrice: 500
id:"3"
category: {id: "2", name: "Electrician"}
totalPrice: 1000
現在,我需要對數據進行分組,如下所示。
我試圖用lodash將其分組 。 但是無法格式化我需要的方式(如上所示)。 我可以在這里得到任何支持嗎?
這就是我嘗試過的。 它只是返回了單個對象。 之后?
let myArray = groupBy(this.data.transactions, (n) => {
return n.category.name;
});
像這樣(這里的數據不同,只是偽數據)
更新:
let a = groupBy(this.data.transactions, (n) => {
return n.category.name;
}).map((objs, key) => ({
'name': key,
'totalPrice': sumBy(objs, 'totalPrice')
})).value();
上面給出了這個錯誤:
core.es5.js:1084錯誤錯誤:未捕獲(承諾):TypeError:Object(...)(...)。map不是函數TypeError:Object(...)(...)。map不是功能
更新2:
const resultArray = [...reduce(this.data.transactions,(r, { totalPrice, category: { name } }) => {
const item = r.get(name) || {
name,
totalPrice: 0
};
item.totalPrice += totalPrice;
return r.set(name, item);
}, new Map()).values()];
錯誤:
錯誤錯誤:未捕獲(承諾):TypeError:Object(...)(...)。values(...)。slice不是函數TypeError:Object(...)(...)。values (...)。slice不是函數
您需要groupBy
和sumBy
,
var grouped = _(jsonarray)
.groupBy('category.name')
.map((objs, key) => ({
'name': key,
'totalPrice': _.sumBy(objs, 'totalPrice') }))
.value();
演示
var jsonarray = [{id:"1", category: {id: "1", name: "Plumber"}, totalPrice: 500 }, { id:"2", category: {id: "1", name: "Plumber"}, totalPrice: 500 }, { id:"3", category: {id: "2", name: "Electrician"}, totalPrice: 1000 }]; var grouped = _(jsonarray) .groupBy('category.name') .map((objs, key) => ({ 'name': key, 'totalPrice': _.sumBy(objs, 'totalPrice') })) .value(); console.log(grouped);
<script src='https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js'></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.