Tengo dos respuestas diferentes de API. Debajo de la respuesta contiene lineId y Name.
this.lines = [ { lineId: "R_X002_ACCESS" localName: "ACCESS" name: "ACCESS" }, { lineId: "R_X00R_X002_BIB2_ACCESS" localName: "BIB" name: "BIB" }, { lineId: "R_X002_KNORR" localName: "Knorr" name: "Knorr" }, { lineId: "R_X002_POWDER" localName: "Powder" name: "Powder" }, ]; Esta respuesta es para la función processData. Aquí quería buscar el nombre de la respuesta api de this.lines en función del ID de línea del objeto del elemento y, si coincide, entonces necesito presionar Nombre
item = { lineId: "R_X002_POWDER" }, { lineId: "R_X00R_X002_BIB2_ACCESS,R_X002_ACCESS" }, { lineId: "R_X002_POWDER" };Ahora, en el siguiente código, estoy buscando un nombre basado en lineId de la respuesta api de this.lines y, si coincide, intento empujar dentro de la matriz plist.
A continuación se muestra mi código, aquí estoy pasando la respuesta api y preparando la matriz en función de alguna condición.
Probé el siguiente código dentro de la función processData , pero no funciona para valores separados por comas y tampoco empuja a la matriz plist adecuada.
var lineName = this.lines.filter(function(line) { if(line.lineId === item.lineId){ return line.name; } }); processData(data: any) { let mappedData = []; for(const item of data){ console.log(item,"item"); var lineName = this.lines.filter(function(line) { if(line.lineId === item.lineId){ return line.name; } }); const mitem = mappedData.find(obj => obj.makeLineName == item.makeLineName); if(mitem){ mitem['plist'].push(item); } else { let newItem = item; newItem['plist'] = [ item ]; mappedData.push(newItem); } } return mappedData; }Rendimiento esperado
lineId: "R_X002_POWDER", name: "Powder" }, { lineId: "R_X00R_X002_BIB2_ACCESS,R_X002_ACCESS", name: "BIB","ACCESS" }, { lineId: "R_X002_KNORR", name: "Knorr" };Creo que debido a que se le devolvió el ID de línea, en lugar de verificar la igualdad de ID de línea, debe verificar si el ID de línea entrante incluye su ID de línea.
en su código: en lugar de line.lineId === item.lineId
marca esto: (item.lineId).includes(line.lineId)
tal vez funcione...
¿Funciona esto para usted (función mapNames ) ...
const lines = [ { lineId: "R_X002_ACCESS", localName: "ACCESS", name: "ACCESS" }, { lineId: "R_X00R_X002_BIB2_ACCESS", localName: "BIB", name: "BIB" }, { lineId: "R_X002_KNORR", localName: "Knorr", name: "Knorr" }, { lineId: "R_X002_POWDER", localName: "Powder", name: "Powder" }, ]; const items = [ { lineId: "R_X002_POWDER" }, { lineId: "R_X00R_X002_BIB2_ACCESS,R_X002_ACCESS" }, { lineId: "R_X002_POWDER" } ]; function mapNames(lines, items) { const mappedLines = {}; lines.forEach(lineItem => { if (!mappedLines[lineItem.lineId]) { mappedLines[lineItem.lineId] = lineItem; } }); const mappedItems = items .map(item => { return { lineId: item.lineId, name: item.lineId.split(",") .map(lineItem => mappedLines[lineItem].name || "") .filter(x => x) .join(",") }; }); return mappedItems; } console.log("Mapped Names:\n", mapNames(lines, items));