Manera eficiente de get todas las llaves en un set desorganizado de objects

Quiero get todas las keys en una matriz de objects. Inicialmente agarré el primer object de la matriz y usé:

var keys = Object.keys(tableData[0]); 

Pero cuando miré más de cerca los datos noté que la primera fila no contenía todas las keys necesarias. En el siguiente ejemplo, el tercer elemento contiene todas las keys, pero es posible que tenga un caso en el que get todas las keys requiera combinar varios objects.

 var tableData = [ { first:"jeff", last:"doe", phone: "2891" }, { first:"sarah", phone:"this", county: "usa" } { first:"bob", last:"brown", county: "usa", phone: "23211" } ]; 

¿Cómo puedo get todas las keys únicas en una matriz de objects que serán eficaces a gran escala?

Puede usar networkinguce() y Set para get el resultado deseado.

 var array = [ { first:"jeff", last:"doe", phone: "2891" }, { first:"sarah", phone:"this", county: "usa" }, { first:"bob", last:"brown", county: "usa", phone: "23211" } ]; var keys = [...new Set(array.networkinguce(function(r, e) { r = r.concat(Object.keys(e)); return r; }, []))]; console.log(keys) 

Simplemente puede hacer lo siguiente;

 var array = [ { first:"jeff", last:"doe", phone: "2891" }, { first:"sarah", phone:"this", county: "usa" }, { first:"bob", last:"brown", county: "usa", phone: "23211" } ]; var result = array.networkinguce((p,o) => Object.assign(p,Object.keys(o)),[]); console.log(result); 

Según un comentario muy correcto, aquí está mi la próxima solución;

 var array = [ { first:"jeff", last:"doe", phone: "2891", moron: "me"}, { first:"sarah", phone:"this", county: "usa" }, { first:"bob", last:"brown", county: "usa", phone: "23211" } ]; var result = array.networkinguce((p,o) => p.concat(Object.keys(o).filter(k => !p.includes(k))),[]); console.log(result); 

Puede usar map() y Set :

 var arr = [ { first:"jeff", last:"doe", phone: "2891", something: "4" }, { first:"sarah", phone:"this", county: "usa" }, { first:"bob", last:"brown", county: "usa", phone: "23211", lastrow: "lr" } ]; var set = new Set(); arr.map(obj => { Object.keys(obj).forEach(el => { set.add(el); }); }); var res = [...set]; console.log(res);