gpt4 book ai didi

javascript - lodash sortBy 然后 groupBy,顺序是否保持?

转载 作者:数据小太阳 更新时间:2023-10-29 04:00:58 27 4
gpt4 key购买 nike

如果我关于排序和分组的假设是正确的,我很难从 lodash 文档中弄清楚。

如果我使用 sortBy,然后使用 groupBy,groupBy 生成的数组是否保持项目的排序顺序?

例如,假设我有以下数组:

var testArray = [[5,6],[1,3],[5,4],[5,1]]

而且我想按它们的第一个元素对它们进行分组,但也希望它们按这些组中的第二个元素进行排序。因此,在 lodash 中,我假设我可以执行以下操作:

_.chain(testArray)
.sortBy(function (item) { return item[1]; })
.groupBy(function (item) { return item[0]; })
.value()

这最终产生了我期望的结果:

{
1: [[1,3]]
5: [[5,1],[5,4],[5,6]]
}

这只是巧合吗?关于 sortBy 和 groupBy 的工作方式是否有任何内容可以确保分组数组的这种排序?文档说 sortBy 是一种稳定的排序,这是否同样适用于 groupBy?有什么理由我不应该假设这每次都有效?

最佳答案

不是。这是不保留顺序的示例:

const data = [
{
item: 'item1',
group: 'g2'
}, {
item: 'item2',
group: 'g3'
}, {
item: 'item3',
group: 'g1'
}, {
item: 'item4',
group: 'g2'
}, {
item: 'item5',
group: 'g3'
}
]

const groupedItems = _(data).groupBy(item => item.group).value()

在这种情况下,人们会期望组顺序为:g2、g3、g1 - 实际情况是它们按 g1、g2、g3 排序。

不过您可以使用原始数组对它们进行重新排序。

const groupedItems = _(data)
.groupBy(item => item.group)
.sortBy(group => data.indexOf(group[0]))
.value()

这将确保项目的原始顺序。

关于javascript - lodash sortBy 然后 groupBy,顺序是否保持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28860526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com