Eliminar los duplicados de la matriz angular
# How to Remove Array Duplicates in ES6 Aquí hay 3 maneras de filtrar los duplicados de un array y devolver sólo los valores únicos. Mi favorita es usar Set porque es la más corta y sencilla const array = [”, 1, 2, ”, ”, 3];
# 1. Usando Set Permíteme empezar explicando qué es Set: Set es un nuevo objeto de datos introducido en ES6. Porque Set sólo permite almacenar valores únicos. Cuando pasas un array, eliminará cualquier valor duplicado. Bien, volvamos a nuestro código y desglosemos lo que está sucediendo. Están pasando 2 cosas: const array = [”, 1, 2, ”, ”, 3];
# 2: Usando el filtro Para entender esta opción, vamos a repasar lo que hacen estos dos métodos: indexOf y filter # indexOf El método indexOf devuelve el primer índice que encuentra del elemento proporcionado de nuestro array. const array = [”, 1, 2, ”, ”, 3];
# filter El método filter() crea un nuevo array de elementos que pasan la condicional que proporcionamos. Es decir, si el elemento pasa y devuelve true, se incluirá en el array filtrado. Y cualquier elemento que falle o devuelva falso, NO estará en el array filtrado. Vamos a ver lo que ocurre mientras recorremos el array. const array = [”, 1, 2, ”, ”, 3];
Eliminar duplicados de un array de objetos javascript
En el código anterior, utilizamos la función JSON.stringify() para convertir cada objeto en una cadena JSON y comparamos las cadenas JSON resultantes entre sí para identificar y eliminar los duplicados. Si dos objetos son idénticos, sus cadenas JSON también deberían ser iguales. Para ello, utilizamos la función filter() que crea un nuevo array de elementos que cumplen una determinada condición. En nuestro caso, esta condición es que no debe haber duplicados en el array. Básicamente, la función filter() se ejecuta para cada objeto uno por uno. Para cada objeto, comprueba todos los duplicados en el array y devuelve los elementos únicos.
El siguiente método es crear un array temporal utilizando cualquiera de las claves, para cada elemento. Para cada índice, los usamos para obtener su correspondiente objeto del array original. En este punto, nuestro array temporal tendrá pares clave-valor donde las claves son una de las claves de los objetos, y el valor es el propio objeto. A continuación, utilizamos los valores del array temporal para crear un nuevo array de objetos únicos. Esto eliminará los duplicados ya que cada clave única extraerá sólo un objeto del antiguo array.
Javascript comprueba si el objeto está en el array
El método de filtrado sólo añade un elemento al array de resultados si la función pasada al método devuelve un valor verdadero. El array de resultados no contiene duplicados. En el ejemplo utilizamos la propiedad id como identificador del objeto. En su caso, el identificador del objeto podría llamarse de otra manera. En esencia, nuestra solución consiste en añadir únicamente identificadores únicos en la matriz uniqueIds
a un Set varias veces, el valor sólo está contenido una vez en el Set.Utilizamos el mismo enfoque, sin embargo no tenemos que comprobar antes de añadir cada ID al Set porque los IDs duplicados se eliminan automáticamente.En lugar de utilizar el método includes podemos utilizar el método has en el
Typescript eliminar los duplicados de la matriz
En el ejemplo anterior, acc es un acumulador que se inicializa con un array vacío y cualquier función reductora que devuelva el resultado se almacena en el acumulador. Pero, antes de almacenar los elementos en el acumulador estamos comprobando que el elemento ya está presente o no, si el elemento no está presente en el acumulador entonces estamos empujando los elementos en el acumulador. Por lo tanto, no hay posibilidades de empujar elementos duplicados en un acumulador. Así que en el resultado final, vamos a obtener una colección de elementos únicos
En el ejemplo anterior, si le damos un array como entrada al objeto Map, entonces el objeto Map lo convierte en un par clave-valor y si encuentra una clave duplicada la reemplaza, así que al final obtenemos un Arry con una colección única de valores.