Tengo una matriz anidada que tiene una propiedad llamada "opciones". La propiedad de opciones es una matriz de objetos, y ahora cada objeto tiene sus propios campos de propiedad, que también es una matriz de objetos.
Entonces, de cada opción en la matriz de opciones, necesito obtener los campos de opción y colocarlos todos en una nueva matriz.
Publicaré una imagen de cómo se ve mi matriz, ya que podría ser más fácil entender cómo se ve. Aquí está la imagen de la matriz.
Ahora he intentado mapearlos todos y luego obtener los campos, pero a mi manera devuelve la matriz pero con cada objeto de campos, pero quiero que se devuelva ya que cada campo dentro de los campos debe ser una nueva propiedad de matriz.
const obj = { key: 'clothes', label: 'Clothes', options: [ { key: 'base-layers', label: 'base-layers', fields: [{ key: 'brand', label: 'brand' }, { key: 'size', label: 'Size' }], }, { key: 'front-layers', label: 'front-layers', fields: [{ key: 'gender', label: 'Gender' }, { key: 'condition', label: 'Condition' }], }, ], }; const getFields = obj.options.map(a => a.map(f => f.fields)); const final = getFields.reduce((r, c) => Object.assign(r, c), {}));Entonces, cada campo dentro del objeto de campos debe ser su propia propiedad en una nueva matriz de objetos.
¡Realmente agradecería la ayuda!
Puede usar una sola función de reducción para iterar sobre cada opción y combinar la colección de campos.
const obj = { key: 'clothes', label: 'Clothes', options: [ { key: 'base-layers', label: 'base-layers', fields: [{ key: 'brand', label: 'brand' }, { key: 'size', label: 'Size' }, { key: 'condition', label: 'Condition' }], }, { key: 'front-layers', label: 'front-layers', fields: [{ key: 'gender', label: 'Gender' }, { key: 'condition', label: 'Condition' }], }, ], }; const allFields = obj.options.reduce((fields, option) => [...fields, ...option.fields], []); console.log(allFields); // Combine all fields without duplications (not optimized) const allFieldsUnique = obj.options.reduce((fields, option) => { return [...fields, ...option.fields.filter(a => !fields.some(b => b.key === a.key))]; }, []); console.log(allFieldsUnique);Use Array.flatMap() para obtener una matriz extrayendo los campos de cada opción.
Si desea un objeto, asigne los campos a una matriz de pares [key, value] y conviértalos en un objeto con Object.fromEntries() :
const obj = {"key":"clothes","label":"Clothes","options":[{"key":"base-layers","label":"base-layers","fields":[{"key":"brand","label":"Brand"},{"key":"size","label":"Size"}]},{"key":"front-layers","label":"front-layers","fields":[{"key":"gender","label":"Gender"},{"key":"condition","label":"Condition"}]}]}; const arr = obj.options.flatMap(option => option.fields) console.log(arr); const object = Object.fromEntries(obj.options.flatMap(option => option.fields.map(({ key, label }) => [key, label]) )); console.log(object);