Tengo dos matrices diferentes y estoy tratando de filtrar una mientras hago un bucle en la otra.
const serviceCodes = [ { ...otherStuff... "codes": [ "786410010", "787885010" ] } ]y
const laborCost = [ { "laborCode": "786410010", "estimatedCost": { "value": -1, "currency": "USD" } }, { "laborCode": "787885010", "estimatedCost": { "value": -1, "currency": "USD" } } ] Estoy recorriendo serviceCodes e intentando devolver solo el objeto que coincide con laborCode
const serviceMatchesRow = serviceCodes[0].codes.forEach((code) => { return laborCost?.find( (service) => service.laborCode === code, ) }) Esto está devolviendo indefinido ya que forEach solo se ejecuta a través de él, pero si uso .map en su lugar, devuelve los 2 objetos dentro de laborCost . Si cambio por .find en su lugar, devuelve una matriz con el laborCode de trabajo ["786410010", 787885010] .
Entonces, ¿cómo puedo evitar esto?
La salida deseada sería algo como:
[{ "laborCode": "786410010", "estimatedCost": { "value": -1, "currency": "USD" } }]forEach método no devuelve nada
por lo que debe insertar los objetos de coincidencias en una nueva matriz. o use el método .map
const serviceMatchesRow = []; serviceCodes[0].codes.map((code) => { serviceMatchesRow.push(laborCost.find((service) => { return service.laborCode === code } )); });Problema: está intentando regresar desde dentro del bloque foreach; eso no devolverá nada por eso ves indefinido.
Solución: use el mapa para regresar mientras itera en una matriz.
const serviceMatchesRow = serviceCodes[0].codes.map((code) => { return laborCost.find( (service) => service.laborCode === code, ) })Violín de trabajo: https://jsfiddle.net/240z5u3f/3/