В этой статье мы увидим, как получить дубликат объекта из массива в JavaScript. Хорошо, это постановка задачи JavaScript, которую мы собираемся обсудить, а также мы решим ее очень простым и понятным способом.

Как мы знаем, массив объектов может содержать несколько элементов и один ключ, о котором мы можем сказать, что идентификатор объекта должен быть уникальным. Таким образом, эта проблема возникает, когда ключ идентификации больше не уникален. Например, если у нас есть массив объектов, в который мы можем поместить несколько объектов, но, допустим, параметр ID должен быть уникальным, но сам массив не будет запрещать объекты с одинаковым ID. Таким образом, возможно, что будет несколько одинаковых идентификаторов. В этой ситуации доступ к конкретному объекту становится затруднительным.

const array = [
            {id: 1, name: "mac"},
            {id: 2, name: "alex"},
            {id: 1, name: "allen" },
            {id: 3, name: "ross"},
            {id: 1, name: "alex"},
        ];

Как вы можете видеть, в приведенном выше коде у нас есть несколько объектов, а также у нас есть несколько повторяющихся объектов с повторяющимися идентификаторами. Здесь, если мы хотим получить доступ к определенному объекту, мы рассматриваем идентификатор, который должен быть уникальным, но здесь у нас есть несколько повторяющихся идентификаторов, поэтому мы получим несколько объектов вместо одного.

Использование метода уменьшения

Чтобы решить такие проблемы, нам нужны какие-то решения для фильтрации нашего массива, где должен быть только уникальный ключ. Для этого у нас есть несколько способов выполнить эту операцию, но мы рассмотрим очень оптимизированный и прямой способ решить эту проблему.

Мы будем использовать метод сокращения, как следует из его названия, он уменьшит массив в соответствии с логикой. Итак, у нас есть массив, как указано выше, затем мы создали константу для хранения нового массива. В этом мы применили метод уменьшения, чтобы получить результат фильтра. Здесь, в reduce((final_array, current)=>{}), final_array — это временный массив для хранения значения, и, наконец, мы сохраним этот массив в new_array. Тогда текущий параметр ссылается на текущий элемент, если он работает как цикл, и его значение будет меняться при каждом повороте. По сути, этот элемент будет хранить тот объект, над которым мы сейчас работаем.

Теперь в этой функции обратного вызова мы создали переменную с именем obj для хранения логического значения true или false. Для этого мы инициировали final_array.find((item)=>item.id === current.id), который возвращает true или false. Мы применили метод find к final_array, чтобы найти аналогичный идентификатор из существующего массива. Допустим, в первый раз final_array будет пустым, поэтому элемент не имеет значения, затем obj станет ложным, и мы объединим текущий объект, если obj ложный. В третий раз, когда идентификатор текущего объекта будет аналогичен первому объекту, в это время obj будет иметь значение true, и мы не будем объединять этот объект в нашем final_array. Таким образом, мы будем объединять только те объекты, у которых есть уникальные идентификаторы.

const array = [
            {id: 1, name: "mac"},
            {id: 2, name: "alex"},
            {id: 1, name: "allen" },
            {id: 3, name: "ross"},
            {id: 1, name: "alex"},
        ];

        const new_array = array.reduce((final_array, current)=>{
            let obj = final_array.find((item)=>item.id === current.id);
            
            if(obj){
                return final_array;
            }else{
                return final_array.concat(current);
            }
            
            },[]);
        console.log(new_array);

Примечание. Здесь массив выполняется последовательно, поэтому значения с повторяющимися идентификаторами не будут отображаться в новом массиве. Как видите, третий и пятый объекты имеют тот же идентификатор, что и первый объект, поэтому третий и пятый не будут помещены в новый массив.

Выход

оформить заказ полностью здесь