javascript – 比较2列表获取移动id偏移方向

我想比较2个列表并得到3个变量:移动项目,偏移,方向.

例1:

旧名单= 121,120,119,43,42,41,40,39,38,37

新名单= 43,121,37

我将项目43移到列表的前面,

移动项目= 43

offset = 3(新老位置之间有3个项目)

direction = 1(向上移动)

例2

旧的nids = 121,37

新的nids = 121,37,42

我在列表末尾向下移动项目42,

移动项目= 42

offset = 5(新旧位置之间有5个项目)

direction = -1(向下移动)

我正在使用javascript来处理它.我可以使用哪种算法?或者我在谷歌搜索提示是什么?非常感谢你!

解决方法

这里只有你的例子测试的东西.也许它至少可以提供一个可能的方向. (我可能遗漏了一些边界/特殊情况.)

var a1 = [121,37],b1 = [43,a2 = [121,b2 = [121,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 ]

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...