大家,早安!今天早上我正在解决一个问题,考虑到我在下面制定的要求,需要重新排序以下 javascript 数组:
编辑:我意识到“重新排序”和“排序”有时可以互换使用。但是在这种情况下,我将“重新排序”称为更改“顺序”属性,以便所有对象都具有唯一的顺序。排序只是指根据 order 属性保持数组升序。
var toOrder = [
{
order: 1,
visible: true
},
{
order: 2,
visible: true
}
]
客户端代码必须能够重新排序这个数组,给定一个接受对象的函数和一个新的顺序。
数组必须始终按升序(按 order 属性)排序
没有两个对象可以有相同的顺序
我写了一些代码来完成工作,但我正在寻找一个更有说服力的解决方案。我当前的重新排序算法(在伪代码中)如下所示:
reorder(myObject, newOrder);
- 循环 toOrder 数组
- 当找到匹配的对象时:
- 如果新订单少于起始订单
- 在新订单和起始订单之间增加对象的订单属性
- 如果新订单大于起始订单
- 开始订单和新订单之间的递减订单属性
- 如果新订单与旧订单相同,则什么也不做
- 在匹配的对象上设置新订单
- 种类()
实用方法“sort()”使用原生 javascript sort() 函数来确保数组始终按“order”属性排序。这很好用,但是有一些更有效/更有说服力的解决方案。
提前致谢。