我试图通过找出移动了哪个元素来找出两个数组之间的差异。我知道一个元素将被准确移动,并且列表其余部分的顺序将保持不变,但我无法弄清楚如何找到它。
示例:
A: 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");
}
}
我已经通过代码修复了打印 b[i] 而不是 a[i],但它不适用于所有情况,例如:
A: 1, 2, 3, 4
B: 1, 4, 2, 3
最佳答案
问题出在 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.');
关于javascript - 如何判断数组中哪个元素被移动了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740825/