Как сравнить два массива
Короткий ответ
Сравните длины, а затем каждый элемент на той же позиции:
const equal = (a, b) => a.length === b.length && a.every((value, index) => value === b[index]);
console.log(equal([1, 2, 3], [1, 2, 3]));
console.log(equal([1, 2, 3], [1, 2, 4]));Результат:
true
falseБез учёта порядка
Отсортируйте копии обоих массивов и сравните их:
const sameItems = (a, b) => {
const x = [...a].sort();
const y = [...b].sort();
return x.length === y.length && x.every((value, index) => value === y[index]);
};
console.log(sameItems(['b', 'a', 'c'], ['c', 'b', 'a']));Результат:
trueВложенные данные
Массивы простых объектов можно сравнить через их JSON-строки. Порядок ключей при этом должен совпадать:
const a = [{ id: 1 }, { id: 2 }];
const b = [{ id: 1 }, { id: 2 }];
console.log(JSON.stringify(a) === JSON.stringify(b));Результат:
trueЧастая ошибка
=== сравнивает массивы по ссылке: два разных массива никогда не равны, даже с одинаковым содержимым:
console.log([1, 2] === [1, 2]);Результат:
falseФункции из этого ответа
- Array.prototype.every — Проверяет, что все элементы массива подходят под условие.
- JSON.stringify — Преобразует значение в строку в формате JSON.
- Array.prototype.includes — Проверяет, есть ли значение в массиве.