我有两个数组,想按索引顺序比较它们的元素。当它们具有不同的项目时,它可以正常工作并显示出差异,但是当它们具有相同的元素(以不同的顺序)时,它什么也不会返回。
array1 = [a, b, c,]
array2 = [a, x, c,]
var diff = this.array1.filter(diff => !this.array2.includes(diff));
this.showDiff = diff.toString(); // prints : x
但是在这种情况下进行比较时:
array1 = [a, b, c]
array2 = [c, b, a]
我需要得到以下结果:[a,c]
在这种情况下:
array1 = [a, b, c]
array2 = [c, a, b]
我需要得到以下结果:[a,b,c]
但是在两种情况下我什么都没有。比较时订单对我很重要。
答案 0 :(得分:1)
如果索引很重要,则在检查另一个数组时需要使用索引。 !array2.includes(diff)
不会这样做。
filter
回调收到索引,因此您可以在检查时使用它:
var diff = this.array1.filter((diff, index) => this.array2[index] !== diff);
实时示例:
function test(array1, array2) {
var diff = array1.filter((diff, index) => array2[index] !== diff);
console.log(`array1 = ${JSON.stringify(array1)}`);
console.log(`array2 = ${JSON.stringify(array2)}`);
console.log(`diff = ${JSON.stringify(diff)}`);
}
test(
["a", "b", "c"],
["c", "b", "a"]
);
test(
["a", "b", "c"],
["c", "a", "b"]
);
注意:这不会尝试处理数组长度不同的问题。问题并没有说明在那种情况下该怎么做,但是一个实际的解决方案可能必须处理它。