Javascript Lodash:如何按多个属性对集合进行分组和排序

Javascript Lodash:如何按多个属性对集合进行分组和排序,javascript,node.js,lodash,Javascript,Node.js,Lodash,如何对集合进行分组,然后按多个属性对集合进行排序 我的收藏看起来像 const list = [ { transactionId: "Id1", amount: 100, timestamp: 1619075704230, user: "username1", }, { transactionId: "Id2", amount: 5, timestamp: 161907

如何对集合进行分组,然后按多个属性对集合进行排序

我的收藏看起来像

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
属性对列表进行分组,然后按
timestamp
amount
字段对接收到的数组进行排序

确切的回答应该是

{
....
  "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",
    }
  ]
  ...
}
如果你使用

你可以这样做

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

let ordered = {};

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

console.log(orderedArray);
您可以通过使用和函数来实现

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);