Me gustaría saber cómo aplanar la matriz de objetos sin solapa mapa en javascript
Si el objeto del objeto de las matrices tiene una longitud superior a 1, aplanar
en mi ejemplo property black tiene más de un objeto, así que devuélvelo en una matriz de objetos
var obj ={ "details": { "black": [ { value: 100, name: "xxx" }, { value: 200, name: "yyy" } ] }, "sales": { "blue": [ { value: 50, name: "abc" } ], "ALL": [ { value: 20, name: "100" } ] } }Rendimiento esperado
[ { value: 100, name: "xxx" }, { value: 200, name: "yyy" } ]He intentado
const result = Object .values(obj) .flatMap(v => Object.values(v as any) .filter((group: any) => group.length > 1) )sin flapmap cómo hacerlo usando javascript
Puede crear una función plana recursiva usando flatten Array.reduce() que toma una matriz multidimensional y la convierte en una matriz plana (área de juegos TS):
const obj = {"details":{"black":[{"value":100,"name":"xxx"},{"value":200,"name":"yyy"}]},"sales":{"blue":[{"value":50,"name":"abc"}],"ALL":[{"value":20,"name":"100"}]}} const flatten = arr => arr.reduce((acc, a) => acc.concat( Array.isArray(a) ? flatten(a) : a ), []) const result = flatten(Object.values(obj) .map(v => Object.values(v) .filter(group => group.length > 1) ) ) console.log(result) Nota : también puede usar Array.flat() pero, dado que salió con Array.flatMap() , es probable que todavía tenga un problema de compatibilidad.
var obj ={ "details": { "black": [ { value: 100, name: "xxx" }, { value: 200, name: "yyy" } ] }, "sales": { "blue": [ { value: 50, name: "abc" } ], "ALL": [ { value: 20, name: "100" } ] } } console.log(obj.details.black)