gpt4 book ai didi

Javascript 按 "groups"排序数组并保持顺序

转载 作者:行者123 更新时间:2023-12-02 02:56:44 24 4
gpt4 key购买 nike

我有一个看起来像这样的数据集:

[
{
"name": "Item1",
"section": "section1",
"total": 3,
}, {
"name": "Item1",
"section": "section2",
"total": 4,
}{
"name": "Item1",
"section": "section3",
"total": 7,
}, {
"name": "Item2",
"section": "section1",
"total": 1,
}, {
"name": "Item2",
"section": "section2",
"total": 2,
}, {
"name": "Item2",
"section": "section3",
"total": 3,
}
]

我只需要按第 3 节项目中的总值对数组进行排序,但保持每个名称的顺序(第 1 节、第 2 节、第 3 节)。因此,对于此示例,Item2 应将其所有 3 行移动到 Item1 之上。我试过按多个项目排序,但这并不能保持我需要的顺序。我应该只得到最小/最大的,抓取相关的项目并将它们放入一个新的数组中并重复,还是有更合乎逻辑的方法来完成这个?

如果我可以在其中利用一些东西,我也会使用 Angular 和 primeng 网格。

最佳答案

我将使用 name 作为键并使用 total 作为 section 等于 section3 的项目的值创建一个 map 。然后您可以使用 map 进行排序。

这将根据 section3 中的 total 的值对所有项目进行排序,并保留排序值匹配的原始排序顺序。

const map = new Map<string, number>(this.data
.filter(x => x.section === 'section3')
.map(x => [ x.name, x.total ]));

this.sorted = this.data.slice()
.sort((a, b) => map.get(a.name) - map.get(b.name));

这确实依赖于您在问题中指定的结构化和排序的数据。

演示:https://stackblitz.com/edit/angular-fsswdq

关于Javascript 按 "groups"排序数组并保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60951350/

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