Estoy tratando de eliminar la matriz similar de objetos con el referente de la clave de nombre en el objeto con esta función getUniqueListBy pero está dando el resultado al eliminar los primeros elementos duplicados en la matriz
Quiero borrar el duplicado del último por referencia con el nombre
Ejemplo de entrada:
[ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 } ]Rendimiento esperado:
[ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'rahul', id:5 ]Lo que hice:
function getUniqueListBy(data, key) { return [ ...new Map(data.map((item) => [item[key], item])).values(), ]; } const data = [ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 } ]; const arr1 = getUniqueListBy(data, "name"); console.log(arr1);Salida de corriente:
[ { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 } ]se eliminó el primer elemento, pero quiero eliminar datos similares del último.
El Map está sobrescribiendo los siguientes valores de la misma clave.
Puede usar un Set para almacenar las claves agregadas y devolver la matriz final usando Array#reduce :
const getUniqueListBy = (data = [], key) => { const set = new Set(); return data.reduce((arr, e) => { if(!set.has(e[key])) { set.add(e[key]); arr.push({...e}); } return arr; }, []); } const data = [ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 } ]; const arr = getUniqueListBy(data, "name"); console.log(arr); const data =[ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 }, ] function getUniqueListBy(data, key) { return [ ...new Map(data.reverse().map((item) => [item[key], item])).values(), ].reverse(); } const arr1 = getUniqueListBy(data, "name"); console.log(arr1)