He estado trabajando en una forma de generar una matriz a partir de un esquema. Casi estoy allí. Estoy enviando las cadenas a la matriz, pero cuando itera sobre el siguiente campo, inicializa la matriz nuevamente y no estoy seguro de cómo solucionarlo.
He incluido un sandbox que tiene el problema. https://codesandbox.io/s/rough-architecture-i94ph?file=/src/App.js
el resultado que quiero debe ser [contractorName, agencyName]
actualmente está log1 [contractorName] log2 [agencyName] log3 []
Cualquier ayuda sería muy apreciada.
prueba esto
export const generateWatchedFields = (schema) => { const watchingArray = []; function iterates(schema){ Object.values(schema).map((propertySchema) => { if (propertySchema.properties) { iterates(propertySchema.properties); } else if (propertySchema.dependencies) { const push = propertySchema.dependencies.watching; watchingArray.push(push); } else { console.log(watchingArray); } }); console.log(watchingArray); } iterates(schema) return watchingArray; };No estoy completamente seguro de si esto es lo que está buscando, pero devuelve ["contratistaNombre", "agenciaNombre"]
Parece que el problema es que declaras tu watchingArray en generateWatchedFields cada vez que llamas a generateWatchedFields .
export const generateWatchedFields = (schema) => { const watchingArray = []; // New array on every call Object.values(schema).map((propertySchema) => { if (propertySchema.properties) { return generateWatchedFields(propertySchema.properties); } else if (propertySchema.dependencies) { const push = propertySchema.dependencies.watching; return watchingArray.push(push); } else { console.log(watchingArray); } }); console.log(watchingArray); return watchingArray; };Entonces solo necesita declararlo fuera de este contexto, así:
var watchingArray = []; export const generateWatchedFields = (schema) => { Object.values(schema).map((propertySchema) => { if (propertySchema.properties) { return generateWatchedFields(propertySchema.properties); } else if (propertySchema.dependencies) { const push = propertySchema.dependencies.watching; return watchingArray.push(push); } else { console.log(watchingArray); } }); console.log(watchingArray); return watchingArray; };