Dada una matriz de objetos, todos con los mismos nombres de propiedad, con javascript, ¿cómo crearía un nuevo objeto compuesto por pares clave: valor que se encuentran en todos los objetos de la matriz?
Por ejemplo, dado:
[ { a: 'foo', b: 'bar', c: 'zip' }, { a: 'urg', b: 'bar', c: 'zip' }, { a: 'foo', b: 'bar', c: 'zip' } ]Resultado:
{ b: 'bar', c: 'zip' }Comience con todos los elementos del primer elemento (clonados, porque no queremos cambiar los datos originales), luego elimine cualquier par clave-valor que no aparezca en los elementos siguientes:
const data = [ { a: 'foo', b: 'bar', c: 'zip' }, { a: 'urg', b: 'bar', c: 'zip' }, { a: 'foo', b: 'bar', c: 'zip' } ]; const [first, ...rest] = data; const result = rest.reduce((a, e) => { Object.keys(a).forEach(k => { if (!k in e || e[k] !== a[k]) { delete a[k]; } }); return a; }, {...first}); console.log(result);Simplemente compare cada valor en el primer objeto con cualquier otro objeto.
const [first, ...others] = [ { a: 'foo', b: 'bar', c: 'zip' }, { a: 'urg', b: 'bar', c: 'zip' }, { a: 'foo', b: 'bar', c: 'zip' } ]; for (const [key, value] of Object.entries(first)) { for (const object of others) { if (object[key] !== value) { delete first[key]; } } } console.log(first);