gpt4 book ai didi

javascript - 如何从排序中排除/跳过项目?

转载 作者:行者123 更新时间:2023-11-30 14:15:17 25 4
gpt4 key购买 nike

有一个对象数组,我需要对其进行排序。它看起来像这样:

var array = [
{left: 20, top: 50, group: 'groupOne'},
{left: 18, top: 10, group: 'groupTwo'},
{left: 15, top: 15, group: 'groupThree'},
{left: 25, top: 30, group: 'groupThree'},
{left: 18, top: 25, group: 'groupFour'},
{left: 28, top: 25, group: 'groupFive'},
{left: 25, top: 15, group: 'groupSix'},
{left: 30, top: 30, group: 'groupSix'}
];

我想按(主要)和顶部(其次)排序。我的排序函数如下所示:

array.sort((x, y) => {
return x.left - y.left || x.top - y.top;
});

结果是:

[
{left: 15, top: 15, group: "groupThree"},
{left: 18, top: 10, group: "groupTwo"},
{left: 18, top: 25, group: "groupFour"},
{left: 20, top: 50, group: "groupOne"},
{left: 25, top: 15, group: "groupSix"},
{left: 25, top: 30, group: "groupThree"},
{left: 28, top: 25, group: "groupFive"},
{left: 30, top: 30, group: "groupSix"}
];

排序功能几乎完全符合我的要求,但如果同一组中有多个项目,它也考虑会更好。

换句话说,我希望最终结果如下所示:

[
{left: 15, top: 15, group: "groupThree"},
{left: 25, top: 30, group: "groupThree"},
{left: 18, top: 10, group: "groupTwo"},
{left: 18, top: 25, group: "groupFour"},
{left: 20, top: 50, group: "groupOne"},
{left: 25, top: 15, group: "groupSix"},
{left: 30, top: 30, group: "groupSix"}
{left: 28, top: 25, group: "groupFive"},
];

来自同一组的项目“粘”在一起。有什么想法吗?

最佳答案

您可以对项目进行分组并对分组的项目进行排序,然后按分组项目的第一个元素进行排序。

稍后平整所有组。

var array = [{ left: 20, top: 50, group: 'groupOne' }, { left: 18, top: 10, group: 'groupTwo' }, { left: 15, top: 15, group: 'groupThree' }, { left: 25, top: 30, group: 'groupThree' }, { left: 18, top: 25, group: 'groupFour' }, { left: 28, top: 25, group: 'groupFive' }, { left: 25, top: 15, group: 'groupSix' }, { left: 30, top: 30, group: 'groupSix' }],
leftTop = (a, b) => a.left - b.left || a.top - b.top,
sorted = Array
.from(
array
.reduce((m, o) => m.set(o.group, (m.get(o.group) || []).concat(o)), new Map)
.values(),
a => a.sort(leftTop)
)
.sort(([a], [b]) => leftTop(a, b))
.reduce((a, b) => a.concat(b));

console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何从排序中排除/跳过项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53683359/

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