Tengo una matriz de objetos para convertir en un objeto con una matriz de valores únicos asignados a las mismas claves.
¿Cómo puedo obtener esta salida?
//aporte
let users = [ { id: 1, name: "Alan", surname: "Davis", age: 34, isAdmin: 'yes'}, { id: 2, name: "John", surname: "Doe", age: 35, isAdmin: 'no'}, { id: 3, name: "Monica", surname: "Bush", age: 25, isAdmin: 'no'}, { id: 4, name: "Sandra", surname: "Back", age: 23, isAdmin: 'no'}, { id: 5, name: "Jacob", surname: "Front", age: 34, isAdmin: 'yes'}, ];//producción
let unique = { id: [1, 2, 3 ,4 ,5], name: ['Alan', 'John', 'Monica', 'Sandra', 'Jacob'], surname: ['Davis', 'Doe', 'Bush', 'Back', 'Front'], age: [34, 35, 25, 23], isAdmin: ['yes', 'no'], }Puede usar Array.prototype.reduce() y para todos los elementos repetir con Array.prototype.forEach() y crear una matriz única con Set
Código:
const users = [{ id: 1, name: 'Alan', surname: 'Davis', age: 34, isAdmin: 'yes' },{ id: 2, name: 'John', surname: 'Doe', age: 35, isAdmin: 'no' },{ id: 3, name: 'Monica', surname: 'Bush', age: 25, isAdmin: 'no' },{ id: 4, name: 'Sandra', surname: 'Back', age: 23, isAdmin: 'no' },{ id: 5, name: 'Jacob', surname: 'Front', age: 34, isAdmin: 'yes' },] const unique = users.reduce((a, c) => ( Object .entries(c) .forEach(([k, v]) => a[k] = [...new Set([...(a[k] || []), v])]), a ), {}) console.log(unique)aquí hay una manera
let users = [ { id: 1, name: "Alan", surname: "Davis", age: 34, isAdmin: 'yes'}, { id: 2, name: "John", surname: "Doe", age: 35, isAdmin: 'no'}, { id: 3, name: "Monica", surname: "Bush", age: 25, isAdmin: 'no'}, { id: 4, name: "Sandra", surname: "Back", age: 23, isAdmin: 'no'}, { id: 5, name: "Jacob", surname: "Front", age: 34, isAdmin: 'yes'}, ]; let unique = Object.fromEntries( Object.keys(users[0]).map(k => [k, users.map(u => u[k]).filter((value, i, arr) => arr.indexOf(value) === i)] ) ); console.log(unique);