【发布时间】:2018-03-15 16:58:17
【问题描述】:
我有一个对象数组:
[{
id : 1,
tag: "video"
},
{
id : 2,
tag: "music"
},
{
id : 3,
tag: "video"
},
{
id : 4,
tag: "music"
},
{
id : 5,
tag: "video"
}]
我想根据 2 个因素对这个数组进行排序:
- 元素的初始位置
- 标签
基本上我应该将标签组合在一起,但同时保持添加项目的顺序,输出应该如下所示:
[{
id : 1,
tag: "video"
},
{
id : 3,
tag: "video"
},
{
id : 5,
tag: "video"
},
{
id : 2,
tag: "music"
},
{
id : 4,
tag: "music"
}]
如您所见,现在它们按标签名称分组,但保留了初始顺序。 id=1 的项目在 id=2 的项目之前,因为它是最先添加的,依此类推。
请注意,我不能使用 id 字段进行这种排序,因为真实的 id 不是整数,它是一个无法比较的唯一字符串。所以我应该使用原始位置索引而不是 id。
我唯一看起来不太好的解决方案是编写一大块代码在初始数组上创建一个 for 并通过检查具有相同标签的最后一项来创建一个新数组,其中项目放置在完美位置添加到原始数组中并获取它的位置并将其添加到该位置的新数组中。
对此有任何最佳解决方案吗?谢谢
【问题讨论】:
-
我重新打开了它,因为它没有按字母顺序排序。这更像是一个分组问题,而不是一个排序问题。
标签: javascript arrays sorting object properties