假设我有一个带索引的对象数组,例如其中包含流行民歌的歌词;)
var lyrics = [ {line : 2, words : "He's a lumberjack and he's okay"}, {line : 1, words : "I'm a lumberjack and I'm okay"}, {line : 3, words : "He sleeps all night and he works all day"} ];
我的比较器将根据每个对象的索引在视图中显示这些对象。我希望能够在此阵列上执行三个任务:
任务1)在拖放时重新索引
通过拖放重新排列对象的顺序。假设我已经知道如何实现拖放。任务示例:将“他是伐木工人,他还可以”从索引“ 1”拖到“我是伐木工人,我还可以”之后。“他是一名伐木工人,他还好”现在应该占据索引“ 2”,“我是伐木工人,我还可以”应该占据索引“ 1”。结果数组应为:
var lyrics = [ {line : 1, words : "I'm a lumberjack and I'm okay"}, {line : 2, words : "He's a lumberjack and he's okay"}, {line : 3, words : "He sleeps all night and he works all day"} ];
任务2)在插入时重新索引
将对象添加到数组中的任何点,以重新索引数组中的所有项目。任务示例:添加“我整夜不眠,整日工作”对象作为数组中的第二项。结果数组应为:
var lyrics = [ {line : 1, words : "I'm a lumberjack and I'm okay"}, {line : 2, words : "I sleep all night and I work all day"}, {line : 3, words : "He's a lumberjack and he's okay"}, {line : 4, words : "He sleeps all night and he works all day"} ];
任务3)删除后重新编制索引
从数组中删除对象,然后重新索引数组中的所有项目。因此,例如,如果删除了索引为“ 3”的对象,则结果数组应为:
var lyrics = [ {line : 1, words : "I'm a lumberjack and I'm okay"}, {line : 2, words : "I sleep all night and I work all day"}, {line : 3, words : "He sleeps all night and he works all day"} ];
我没有计算机科学学位,所以我对哪种算法可以帮助我解决这个问题感到困惑。有人可以指出我正确的方向吗?
我正在使用javascript,因此,如果有人知道做上述事情的任何事情,我将不胜枚举。
我会完全简化您的整个结构:
使用本机javascript数组,而不是存储额外的键(line),请使用javascript索引作为键,这意味着javascript(如果正确使用)将为您管理它,并使用较少的内存。
line
因此,我们有一个字符串数组:
var f = []; f.push('first'); f.push('third'); f.push('fourth'); // reindex on insert // lets insert second in the natural place f.splice(1,0,'second'); // ["first", "second", "third", "fourth"] // reindex on delete // lets delete 'third' f.splice(2,1); // ["first", "second", "fourth"]
等等