Tengo una matriz de objetos con la siguiente estructura.
const arr = [ {id: 0, name: "abc", userid: "0"}, {id: 1, name: "lmn", userid: "123"}, {id: 3, name: "pqr", userid:"456"}, {id: 4, name: "xyz", userid: "123"} ]Quiero devolver los objetos donde el ID de usuario debe ser único y no es igual a "0".
Este es mi enfoque. Me devuelve todo
const result = [ ...new Set( arr.map((node) => { if (node.userid !== "0") return node; }) ) ]; console.log(result);En lugar de usar Set , use Map . Ambos se utilizan para almacenar valores únicos, la diferencia entre ellos es Set para matrices con valores únicos, mientras que Map para objetos con claves únicas.
const arr = [ {id: 0, name: "abc", userid: "0"}, {id: 1, name: "lmn", userid: "123"}, {id: 3, name: "pqr", userid: "456"}, {id: 4, name: "xyz", userid: "123"} ]; const result = new Map() arr.forEach(node => { if(node.userid !== "0"){ result.set(node.userid,node); } }) console.log([...result.values()]); // log intended resultsPara una solución abreviada puede usar:
const result = [...new Map(arr.filter(node=>node.userid!=="0").map(node=>[node.userid, node])).values()]; console.log(result) // log intended resultsTal vez eso podría hacerse de una manera más abreviada, pero funciona de esta manera:
const arr = [ {id: 0, name: "abc", userid: "0"}, {id: 1, name: "lmn", userid: "123"}, {id: 3, name: "pqr", userid: "456"}, {id: 4, name: "xyz", userid: "123"} ]; const clearZero = arr.filter((obj) => obj.id != 0); const finalArray = []; clearZero.forEach((obj) => { if (finalArray.every((elem) => elem.userid !== obj.userid)) { finalArray.push(obj); } }) console.log(finalArray); // logs out no. 1 and no.3