簡體   English   中英

Lodash:如何分組,然后按多個屬性對集合進行排序

[英]Lodash: How to group, then sort collection by more than one property

如何分組,然后按多個屬性對我的收藏進行排序?

我的收藏看起來像

const list = [
  {
    transactionId: "Id1",
    amount: 100,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id2",
    amount: 5,
    timestamp: 1619075704230,
    user: "username2",
  },
  {
    transactionId: "Id3",
    amount: 8,
    timestamp: 1619075704230,
    user: "username3",
  },
  {
    transactionId: "Id4",
    amount: 12,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id5",
    amount: 200,
    timestamp: 1619075704230,
    user: "username7",
  },
  {
    transactionId: "Id6",
    amount: 99,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id7",
    amount: 78,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id8",
    amount: 12,
    timestamp: 1619075704230,
    user: "username9",
  },
];

我想按user屬性對列表進行分組,然后按timestampamount字段對收到的 arrays 進行排序。

確切的反應應該是

{
....
  "username1": [
    {
      transactionId: "Id1",
      amount: 100,
      timestamp: 1619075704230,
      user: "username1",
    },
    ,
    {
      transactionId: "Id6",
      amount: 99,
      timestamp: 1619075704230,
      user: "username1",
    },
    {
      transactionId: "Id7",
      amount: 78,
      timestamp: 1619075704230,
      user: "username1",
    },
    {
      transactionId: "Id4",
      amount: 12,
      timestamp: 1619075704230,
      user: "username1",
    }
  ]
  ...
}

您可以使用groupByorderBy函數來完成。

const list = [
  {
    transactionId: "Id1",
    amount: 100,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id2",
    amount: 5,
    timestamp: 1619075704230,
    user: "username2",
  },
  {
    transactionId: "Id3",
    amount: 8,
    timestamp: 1619075704230,
    user: "username3",
  },
  {
    transactionId: "Id4",
    amount: 12,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id5",
    amount: 200,
    timestamp: 1619075704230,
    user: "username7",
  },
  {
    transactionId: "Id6",
    amount: 99,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id7",
    amount: 78,
    timestamp: 1619075704230,
    user: "username1",
  },
  {
    transactionId: "Id8",
    amount: 12,
    timestamp: 1619075704230,
    user: "username9",
  },
];

const sorted = _.orderBy(list, ['timestamp', 'amount'], ['desc', 'desc']);

const result = _.groupBy(sort, 'user');

console.log('Result: ', result);

如果你使用lodash

你可以做類似的事情

let grouped = _.groupBy(list,'user');

let ordered = {};

for (const [key, value] of Object.entries(grouped)) {
  ordered[key] = _.orderBy(value,['timeStamp','amount']);
}

console.log(orderedArray);

暫無
暫無

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

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