Dada una array de objetos y la tarea es devolver el objeto único por el atributo.
Ejemplos:
Input: [ { name: 'Geeks', id: 10 }, { name: 'GeeksForGeeks', id: 10 }, { name: 'Geeks', id: 20 }, { name: 'Geeks', id: 10 } ] Output: [ { name: 'Geeks', id: 10 }, { name: 'GeeksForGeeks', id: 10 } ]
Enfoque: supongamos que el nombre es un atributo que diferencia los objetos y necesitamos el objeto con un número de identificación mínimo si existen varios objetos para el mismo nombre. Use el mapa para almacenar objetos y verifique si se ven objetos similares o no.
- Inicializar un mapa vacío.
- Iterar a través de la array usando el método de filtro.
- Compruebe si hay alguna entrada en el mapa con el mismo nombre que el objeto actual.
- —-Si es verdadero: es decir, existe una entrada con el mismo nombre, compruebe si su id es menor que la id del objeto actual.
- ——–Si es verdadero: es decir, la identificación del objeto actual es menor que la identificación del objeto devuelto por el mapa, entonces elimine la entrada del mapa e ingrese el objeto actual y devuelva verdadero.
- ——–si es falso: es decir, la identificación del objeto actual es mayor que la identificación del objeto devuelto por el mapa, luego devuelve falso.
- —-Si es falso: es decir, no hay ninguna entrada en el mapa con el mismo nombre, ingrese el objeto actual en el mapa.
- Imprime objetos únicos.
Ejemplo:
<script> objects = [{ name: 'Geeks', id: 10 }, { name: 'GeeksForGeeks', id: 10 }, { name: 'Geeks', id: 20 }, { name: 'Geeks', id: 10 }]; let mymap = new Map(); unique = objects.filter(el => { const val = mymap.get(el.name); if(val) { if(el.id < val) { mymap.delete(el.name); mymap.set(el.name, el.id); return true; } else { return false; } } mymap.set(el.name, el.id); return true; }); console.log(unique); </script>
Producción:
[ { name: 'Geeks', id: 10 }, { name: 'GeeksForGeeks', id: 10 } ]
Complejidad temporal: O(n)
Complejidad espacial: O(n)
Publicación traducida automáticamente
Artículo escrito por neerajnegi174 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA