Tengo una serie de objetos que se ven así:
[{"Account Name":"John Hill","Account Type":"Services","Organization":"A","Account Address":"2 Westall Rd"}, {"Account Name":"John Hill","Account Type":"Training","Organization":"A","Account Address":"2 Westall Rd"}, {"Account Name":"Dave Butcher","Account Type":"Engieering","Organization":"A","Account Address":"Level 1/55 Sunshine Blvd"}, {"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd}, {"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd"}] De los objetos anteriores, hay algunos nombres de cuenta duplicados, pero son únicos debido al tipo de cuenta. Estoy tratando de encontrar una manera de filtrarlo para que una combinación de valores clave haga que un objeto sea único, en lugar de una sola clave. Algo así como filtrar el Account Name de la Account Type de cuenta.
También noté que algunas soluciones crearían una nueva matriz e incluirían solo las claves para filtrar, pero me gustaría que la solución conserve todas las claves de un objeto en lugar de crear un nuevo objeto con claves menores.
El resultado esperado se vería así:
[{"Account Name":"John Hill","Account Type":"Services","Organization":"A","Account Address":"2 Westall Rd"}, {"Account Name":"John Hill","Account Type":"Training","Organization":"A","Account Address":"2 Westall Rd"}, {"Account Name":"Dave Butcher","Account Type":"Engieering","Organization":"A","Account Address":"Level 1/55 Sunshine Blvd"}, {"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd}] const array = [{"Account Name":"John Hill","Account Type":"Services","Organization":"A","Account Address":"2 Westall Rd"}, {"Account Name":"John Hill","Account Type":"Training","Organization":"A","Account Address":"2 Westall Rd"}, {"Account Name":"Dave Butcher","Account Type":"Engieering","Organization":"A","Account Address":"Level 1/55 Sunshine Blvd"}, {"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd"}, {"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd"}] const filteredArr = array.reduce((acc, current) => { const x = acc.find(item => (item['Account Name'] === current['Account Name'] ) && (item['Account Type'] === current['Account Type'])); if (!x) { return acc.concat([current]); } else { return acc; } }, []); console.log(filteredArr);Usa un Map . Recorra la matriz y, en cada iteración, cree una clave a partir del Account Name y el Account Type de cuenta, y set todo el objeto como su valor. Finalmente, use values() para devolver una matriz deduplicada.
const data=[{"Account Name":"John Hill","Account Type":"Services",Organization:"A","Account Address":"2 Westall Rd"},{"Account Name":"John Hill","Account Type":"Training",Organization:"A","Account Address":"2 Westall Rd"},{"Account Name":"Dave Butcher","Account Type":"Engieering",Organization:"A","Account Address":"Level 1/55 Sunshine Blvd"},{"Account Name":"Jake Wellington","Account Type":"Management",Organization:"A","Account Address":"11 Maroochy Rd"},{"Account Name":"Jake Wellington","Account Type":"Management",Organization:"A","Account Address":"11 Maroochy Rd"}]; const map = new Map(); for (const obj of data) { const key = `${obj['Account Name']}-${obj['Account Type']}`; map.set(key, obj); } console.log([...map.values()]);Puede usar el enfoque de grupo hash para filtrar por varias propiedades:
const data = [{"Account Name":"John Hill","Account Type":"Services","Organization":"A","Account Address":"2 Westall Rd"},{"Account Name":"John Hill","Account Type":"Training","Organization":"A","Account Address":"2 Westall Rd"},{"Account Name":"Dave Butcher","Account Type":"Engieering","Organization":"A","Account Address":"Level 1/55 Sunshine Blvd"},{"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd"},{"Account Name":"Jake Wellington","Account Type":"Management","Organization":"A","Account Address":"11 Maroochy Rd"}]; const uniqHashes = data.reduce((acc, item) => { const hash = [item['Account Name'], item['Account Type']].join('-'); acc[hash] ??= item return acc; }, {}); const uniqs = Object.values(uniqHashes); console.log(uniqs); .as-console-wrapper { max-height: 100% !important; top: 0 }