Tengo un objeto así.

let Filus = {
     male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

Quiero obtener esta matriz de este objeto.

let Filus = [1,2,3,4,5];

¿Cómo hacerlo?

4
Squanchy 11 may. 2019 a las 11:23

4 respuestas

La mejor respuesta

Simplemente use Object.values y flat; esto funciona incluso si no conoce la clave del objeto anidado:

let Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

const res = Object.values(Object.values(Filus)[0]).flat();
console.log(res);

Sintaxis ES5:

var Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

var res = Object.keys(Filus[Object.keys(Filus)[0]]).map(function(key) { 
  return Filus[Object.keys(Filus)[0]][key];
}).reduce(function(acc, curr) {
  return acc.concat(curr);
});

console.log(res);

También es fácil si tienes la clave:

let Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

const res = Object.values(Filus.male).flat();
console.log(res);

Sintaxis ES5:

var Filus = {
  male: {
    hat: [1],
    jacket: [2],
    pants: [3],
    shoes: [4],
    suit: [5]
  }
};

var res = Object.keys(Filus.male).map(function(key) { 
  return Filus.male[key];
}).reduce(function(acc, curr) {
  return acc.concat(curr);
});

console.log(res);
4
Jack Bashford 11 may. 2019 a las 08:34

Puede obtener valores del objeto anidado male usando Object.values() y luego use flat()

let Filus = { male : { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } };

const res = Object.values(Filus.male).flat();
console.log(res)

También puede hacerlo sin flat() usando concat() y el operador de propagación.

let Filus = { male : { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } };

const res = [].concat(...Object.values(Filus.male));
console.log(res)
6
Maheer Ali 11 may. 2019 a las 08:39

Si el objeto es de una cadena JSON, los números se pueden extraer durante el análisis:

var arr = [], json = '{"male":{"hat":[1],"jacket":[2],"pants":[3],"shoes":[4],"suit":[5]}}'

JSON.parse(json, (k, v) => v.toFixed && arr.push(v))

console.log(arr)
1
Slai 11 may. 2019 a las 09:13

Puede tomar un Generator y devuelve todos los valores encontrados del objeto y sus objetos anidados.

Este enfoque se basa en el orden inherente del lenguaje de los objetos.

function* values(o) {
    if (o && typeof o === 'object') for (let v of Object.values(o)) yield* values(v);
    else yield o;
} 

let filus = { male: { hat: [1], jacket: [2], pants: [3], shoes: [4], suit: [5] } },
    result = [...values(filus)];

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
Nina Scholz 11 may. 2019 a las 08:50