Для проверки всей вложенности массива объектов на дубликаты в JavaScript вам потребуется пройтись по каждому объекту и проверить его наличие во вложенных объектах.
Существует несколько подходов к решению этой задачи. Ниже рассмотрены два из них.
1. Используя циклы:
function checkDuplicates(arr) { // Создание объекта для отслеживания существующих объектов var cache = {}; // Перебор каждого объекта в массиве for (var i = 0; i < arr.length; i++) { var currentObject = arr[i]; // Проверка, содержится ли текущий объект в кэше if (cache[JSON.stringify(currentObject)]) { return true; // Дубликат найден } // Сохранение текущего объекта в кэше cache[JSON.stringify(currentObject)] = true; // Проверка, имеет ли текущий объект вложенные объекты, // и рекурсивный вызов для проверки дубликатов во вложенности for (var prop in currentObject) { if (typeof currentObject[prop] === 'object' && currentObject[prop] !== null) { if (checkDuplicates([currentObject[prop]])) { return true; // Дубликат найден } } } } return false; // Дубликат не найден } // Пример использования: var arrayOfObjects = [ { name: 'John', age: 25 }, { name: 'Alex', age: 30 }, { name: 'John', age: 25 } ]; console.log(checkDuplicates(arrayOfObjects)); // true
Данный подход использует объект cache
для отслеживания уже пройденных объектов. Если текущий объект уже находится в кэше, то это означает, что мы нашли дубликат. Затем проверяется наличие вложенных объектов для каждого свойства текущего объекта и вызывается рекурсивная проверка для них.
2. Используя рекурсию и Set
:
function checkDuplicates(arr) { // Создание нового Set и добавление каждого объекта массива в него var set = new Set(arr); // Проверка размера Set перед и после добавления всех объектов // Если размер изменяется, значит, в массиве присутствуют дубликаты if (set.size !== arr.length) { return true; // Дубликат найден } // Проверка вложенных объектов для каждого объекта в массиве for (var i = 0; i < arr.length; i++) { for (var prop in arr[i]) { if (typeof arr[i][prop] === 'object' && arr[i][prop] !== null) { if (checkDuplicates([arr[i][prop]])) { return true; // Дубликат найден } } } } return false; // Дубликат не найден } // Пример использования: var arrayOfObjects = [ { name: 'John', age: 25 }, { name: 'Alex', age: 30 }, { name: 'John', age: 25 } ]; console.log(checkDuplicates(arrayOfObjects)); // true
В этом решении используется Set
, который представляет коллекцию уникальных значений. Мы создаем новый Set
и добавляем каждый объект массива в него. Затем мы сравниваем размер Set
с длиной массива. Если они не совпадают, то это означает, что в массиве есть дубликаты. Затем проводится проверка вложенных объектов для каждого объекта в массиве, используя рекурсию.