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