比较 2 列表得到移动 ID + 偏移量 + 方向

Compare 2 list get the moving id + offset + direction

本文关键字:ID 偏移量 方向 移动 列表 比较      更新时间:2023-09-26

我想比较 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 ]