Вы можете сделать это в следующих шагах:
- Сначала получите те элементы
a
, которых нет в b
- Затем получите те элементы
b
, которыене находятся в a
- Тогда
concat()
оба массива.
let a = ["ABC", "DEF"]
let b = ["ABC", "DEF", "GHI"]
const res = a.filter(x => !b.includes(x)).concat(b.filter(x=> !a.includes(x)))
console.log(res)
Как работает код
Рассмотрим строку
a.filter(x => !b.includes(x))
filter()
- это метод массива, который принимает обратный вызов.Если обратный вызов возвращает true
, тогда элемент будет добавлен в массив результатов, иначе нет.
Так что теперь в приведенном выше коде x
является элементом массива b
, через который мы итерируем.b.includes(x)
вернет true
, если x
присутствует в массиве b
, иначе false
.
!
оператор преобразует true
в ложь и наоборот
Таким образом, если x
будет внутри b
, он вернет true
.Таким образом, к !
оно станет false
и false
будет возвращено из обратного вызова.Поэтому элемент x
не будет включен в массив результатов / фильтрации.
Предложение для строки над строкой состоит в том, что "Он получает только те элементы массива a
, которые отсутствуют вb
"
Вторая строка
b.filter(x=> !a.includes(x))
Получает элементы b
, которых нет в a
.
Atlast concat()
используется для объединения обоих массивов.