Tengo un componente secundario, en el que, después de presionar el botón, pasa un campo de formulario a un componente principal. Tengo que pasar estos campos como parámetros de consulta a una API GET /valuation/ que requiere más o menos 20 parámetros opcionales, en los que el nombre difiere de los campos de entrada.
Creé un objeto temporal res dentro de la función padre accept en el que itero el campo. Todavía no puedo entender cómo pasar este parámetro dentro del objeto res , usando múltiples if es código sucio.
por ejemplo Función en componente padre
accept(form:any){ const req: any = {}; if(form.name) req.user = form.name if(form.address) req.clusterAddress = form.address ... and so on x 20 times this.requestService.getRequest(req).subscribe( (response) => { this.getRequest(response); }, (error) => { console.error(error); } }Como puede ver, esta no es una opción viable, ¿qué puedo usar para tomar dinámicamente los nombres de los parámetros de consulta?
Puede usar un mapa para almacenar información sobre qué propiedad del formulario se asigna a qué propiedad en su objeto res y luego iterar a través de las claves, verificar la presencia del valor y asignar:
const formToResMap: { [key: string]: string } = { name: 'name', address: 'clusterAddress', // ... }; accept(form: any) { const req = Object.keys(formToResMap).reduce((acc, key) => { if (form[key]) { acc[formToResMap[key]] = form[key]; } return acc; }, {}); console.log(req); }