比较 2 列表得到移动 ID + 偏移量 + 方向
Compare 2 list get the moving id + offset + direction
我想比较 2 个列表并得到 3 个变量:移动项目、偏移量、方向。
示例 1:
旧列表 = 121,120,119,43,42,41,40,39,38,37
新列表 = 43,121,120,119,42,41,40,39,38,37
我将项目43移到列表的前面,
移动项目 = 43
偏移量 = 3(新旧位置之间有 3 个项目)
方向 = +1(向上移动时)
例 2
旧 nids = 121,120,119,43,42,41,40,39,38,37
新NID= 121,120,119,43,41,40,39,38,37,42
我将列表末尾的第 42 项向下移动,
移动项目 = 42
偏移量 = 5(新旧位置之间有 5 个项目)
方向 = -1(向下移动时)
我正在使用javascript来处理它。我可以使用哪种算法?或者我在谷歌中搜索的提示是什么?谢谢!
这是仅通过您的示例测试的内容。也许它至少可以提供一种可能的方向。(我可能遗漏了一些边界/特殊情况。
var a1 = [121,120,119,43,42,41,40,39,38,37],
b1 = [43,121,120,119,42,41,40,39,38,37],
a2 = [121,120,119,43,42,41,40,39,38,37],
b2 = [121,120,119,43,41,40,39,38,37,42];
function f(a,b){
var item,
i = offset = 0,
direction;
while (a[i] == b[i]){
i++;
}
if (a[i + 1] == b[i]){
direction = -1;
item = a[i];
while (b[i] != item){
offset++;
i++;
}
} else {
direction = 1;
item = b[i];
while (a[i] != item){
offset++;
i++;
}
}
return [item,offset,direction]
}
输出:
console.log(f(a1,b1))
Array [ 43, 3, 1 ]
console.log(f(a2,b2))
Array [ 42, 5, -1 ]
相关文章:
- 添加新数据时D3.JS条形图列偏移量
- 当偏移量改变时滚动顶部
- 引导数据偏移量底部
- 可以在调整窗口大小时重新调整stellar.js的元素偏移量
- 可滚动元素,如何在调整大小时更改顶部偏移量
- 使用JavaScript日期的任何时间的时区偏移量
- 时刻时区:UTC 偏移量差异
- jQuery偏移量顶部没有'工作不正常
- 如何获取当前时区偏移量(并正确格式化)
- d3.mouse 偏移量返回的值不正确
- jQuery根据鼠标位置计算DIV偏移量和边界
- 更改 for 循环中 SVG 行的笔触虚线偏移量
- 时区偏移量计算
- jquery 如何设置偏移量 () 值
- 在javascript中向本地时间戳添加时间戳偏移量
- jQuery平滑滚动到相同页面和其他页面上的ID:如何设置偏移量
- 滚动到页面上的 ID 未正确计算偏移量
- 比较 2 列表得到移动 ID + 偏移量 + 方向
- 在单个条件下检查滚动顶部和 id 偏移量
- 当页面加载时,会出现平滑滚动,当ID和哈希值设置相同时,偏移量会跳跃