Tengo debajo de la matriz de objetos:
var all = [ {f1: "v1", f2: "v2"}, {f1: "v1", f2: "v2", f3: "v3"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4", fn: "vn"} ];Salida deseada:
[f1, f2, f3, f4, f5, ...., fn];Actualmente usando:
all.reduce((sum, item) => ([...new Set([...sum, ...Object.keys(item)])]), []);Ejemplo de trabajo: codepen
Cualquier sugerencia usando es6 o cualquier característica nueva de js, para un mejor rendimiento.
Puede aplanarlos en un solo objeto y luego tomar las llaves.
var all = [ {f1: "v1", f2: "v2"}, {f1: "v1", f2: "v2", f3: "v3"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4", fn: "vn"} ]; const output = Object.keys(Object.assign({}, ...all)); console.log(output);var all = [ {f1: "v1", f2: "v2"}, {f1: "v1", f2: "v2", f3: "v3"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4", fn: "vn"} ]; console.log(Object.keys(all[all.length-1]))Usando Array.flatMap y un objeto Set para obtener un Conjunto de claves únicas y luego use el operador de propagación para convertir el Conjunto nuevamente en una matriz.
var all = [ {f1: "v1", f2: "v2"}, {f1: "v1", f2: "v2", f3: "v3"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4"}, {f1: "v1", f2: "v2", f3: "v3", f4: "v4", fn: "vn"} ]; const res = [...new Set(all.flatMap(Object.keys))]; console.log(res);