removeDuplicates () toma una matriz de objetos y devuelve una nueva matriz sin ningún objeto duplicado (basado en la propiedad id).
const allTests = [
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'},
{name: 'Test2', id: '2'},
{name: 'Test3', id: '3'}
];
function removeDuplicates(array) {
let uniq = {};
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true))
}
removeDuplicates(allTests);
Gastos esperados:
[
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'}
];
Primero, establecemos el valor de la variable uniq en un objeto vacío.
A continuación, filtramos a través de la matriz de objetos. Filter crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada.
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true));
Arriba, utilizamos la funcionalidad de cortocircuito de &&. Si el lado izquierdo de && se evalúa como verdadero, entonces devuelve el valor a la derecha de &&. Si el lado izquierdo es falso, devuelve lo que está en el lado izquierdo de &&.
Para cada objeto (obj) verificamos uniq para una propiedad llamada valor de obj.id (en este caso, en la primera iteración verificaría la propiedad '1'). Queremos lo contrario de lo que devuelve (ya sea verdadero o falso) por eso usamos el! in! uniq [obj.id]. Si uniq ya tiene la propiedad id, devuelve verdadero que se evalúa como falso (!) Indicando a la función de filtro que NO agregue ese obj. Sin embargo, si no encuentra la propiedad obj.id, devuelve falso, que luego se evalúa como verdadero (!) Y devuelve todo a la derecha de &&, o (uniq [obj.id] = verdadero). Este es un valor verdadero, que le dice al método de filtro que agregue ese obj a la matriz devuelta, y también agrega la propiedad {1: true} a uniq. Esto asegura que cualquier otra instancia de obj con esa misma identificación no se agregará nuevamente.