есть ли способ сравнить массивы по порядку индексов и показать разницу?


есть ли способ сравнить массивы по порядку индексов и показать разницу?

24.10.2020 06:14:01 Просмотров 14 Источник

У меня есть два массива, и я хочу сравнить их элементы по порядку индексов. когда у них есть разные элементы, он работает нормально и показывает разницу, но когда у них есть одни и те же элементы в разных порядках, он ничего не возвращает.. вот мой код, Пожалуйста, помогите мне.

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]

но я ничего не получил в обоих сценариях. заказы важны для меня при сравнении.

У вопроса есть решение - Посмотреть?

Ответы - есть ли способ сравнить массивы по порядку индексов и показать разницу? / is there a way to compare arrays by index orders and show the difference?

Является ответом!
T.J. Crowder

24.10.2020 06:17:17

Если индексы имеют значение, вам нужно использовать индекс при проверке другого массива. !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"]
);

Примечание: это не делает никаких попыток справиться с проблемами, когда массивы не имеют одинаковой длины. Вопрос не говорил, что делать в этом случае, но реальное решение, по-видимому, должно было справиться с этим.

Помочь в развитии проекта:
Закрыть X