Javascript 确定有序列表的秩(位置)属性

Javascript 确定有序列表的秩(位置)属性,javascript,database,sqlite,position,rank,Javascript,Database,Sqlite,Position,Rank,有序列表存储在不保留顺序的客户端数据库中(想想sqlite表)。列表的多个版本将同时存储和编辑,偶尔还会合并。为了在并发编辑时保持顺序,使用rank(position)属性对列表进行排序 rank属性应该是什么样子?在插入列表时,可以使用什么算法来确定新项目的排名 解释 在todo应用程序中,多个脱机客户端编辑同一列表,但偶尔联机并同步。待办事项列表是一组无序的实体,例如: [{id: 1001, rank: 1}, {id: 1002, rank: 2}, {id: 1003, rank: 3

有序列表存储在不保留顺序的客户端数据库中(想想sqlite表)。列表的多个版本将同时存储和编辑,偶尔还会合并。为了在并发编辑时保持顺序,使用rank(position)属性对列表进行排序

rank
属性应该是什么样子?在插入列表时,可以使用什么算法来确定新项目的
排名

解释 在todo应用程序中,多个脱机客户端编辑同一列表,但偶尔联机并同步。待办事项列表是一组无序的实体,例如:

[{id: 1001, rank: 1}, {id: 1002, rank: 2}, {id: 1003, rank: 3}]
通过
rank
属性,客户端可以在任意位置添加项目或重新排序列表。在我的示例中,整数用于指示位置,但可以使用任何可排序的JSON数据类型(字符串、浮点、甚至集合)。
id
属性是随机生成的

当客户端联机时,它们的列表将自动合并。在此过程中,不应丢失任何更新,生成的合并列表应符合用户期望

假设以下约束条件:

  • 项目应具有确定的排序顺序
  • 客户机需要能够在任何位置插入todo项(第一项之前、第一项之后、…、最后一项之后)
  • 在任何情况下都不可能在两个项目之间插入一个项目

插入新项目时,可能不可避免地要对列表项目重新编号。但是,就重新编号事件影响合并而言,应尽量减少意外的合并行为。

我不久前偶然发现了一些可能给您带来一些想法的方法。您还没有告诉我们这些“用户期望”是什么。定义“惊奇”。@Shawn,这是一篇非常好的文章,谢谢。特别是关于使用有理数的那一节很有趣。@CL,我认为那里有回旋的余地。我可以举个例子。从AB开始,两个客户端分别在项目之间插入X和Y。合并AXB和AYB的结果不应该是XYAB-如果元素跳到列表的开头,这将是令人惊讶的。但AXYB和AYXB都是可以接受的合并结果。