有没有一种方法可以按索引顺序比较数组并显示差异?

时间:2020-10-24 15:14:01

标签: javascript vue.js

我有两个数组,想按索引顺序比较它们的元素。当它们具有不同的项目时,它可以正常工作并显示出差异,但是当它们具有相同的元素(以不同的顺序)时,它什么也不会返回。

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]

但是在两种情况下我什么都没有。比较时订单对我很重要。

1 个答案:

答案 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"]
);

注意:这不会尝试处理数组长度不同的问题。问题并没有说明在那种情况下该怎么做,但是一个实际的解决方案可能必须处理它。

相关问题