我试图通过找出移动哪个元素来找到两个数组之间的差异。我知道一个元素将被完全移动,并且列表的其余部分将保持顺序,但是我无法弄清楚如何找到它。
例:

所有元素都存在于两个列表中,但是如何找出元素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");
    }
}
我已经通过代码修复了打印出b [i]而不是a [i]的问题,但是在所有情况下,它都无法正常工作:

最佳答案

问题出在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.');

09-25 16:57
查看更多