簡體   English   中英

使用Lodash將Javascript數組分組

[英]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不是函數

您需要groupBysumBy

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.

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