如何确定在数组中移动了哪个元素?

Fli*_*per 2 javascript arrays jquery

我试图通过找出移动了​​哪个元素来找到两个数组之间的差异.我知道一个元素将被移动,并且将为列表的其余部分维护订单,但我无法弄清楚如何找到它.

例:

答:1 2 3 4 5 6

B:2 3 4 5 1 6

两个列表中都存在所有元素,但是如何找出元素1从索引0移动到索引4?

我采取但不起作用的基本方法是:

//Original array
var a = [1, 2, 3, 4, 5, 6];

//New array
var b = [2, 3, 4, 5, 1, 6];

for(var i=0; i < a.length; i++) {
    if(a[i] != b[i] && a[i+1] != b[i]) {
        console.log(b[i] + " moved");
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经修改了代码来打印出b [i]而不是[i],但它并不适用于所有情况,例如:

答:1,2,3,4

B:1,4,2,3

Mic*_*ael 5

问题在于你的if陈述中的第二个条件.在您的示例中,当元素a[0]移动时a[0+1] === b[0],因此if子句的计算结果为false.

试试吧,

var idx = 0;
var len = a.length;
while ((a[idx] === b[idx] || a[idx] === b[idx+1]) && idx < len) {
    idx++;
}
console.log('Element a[' + idx + ']=' + a[idx] + ' moved.');
Run Code Online (Sandbox Code Playgroud)