Estoy tratando de unir la matriz de propiedades internas de los objetos con la coma , como se muestra a continuación
const multiSpaceIdentityInformation = spaces?.reduce( (acc, space) => { acc.roomName = `${acc.roomName},${space.spaceIdentity.roomName}`; acc.roomNumber = `${acc.roomNumber},${space.spaceIdentity.roomNumber}`; acc.storyName = `${acc.storyName},${space.buildingStory?.name}`; acc.spaceNumber = `${acc.spaceNumber},${space.spaceIdentity.number}`; acc.spaceName = `${acc.spaceName},${space.spaceIdentity.name}`; return acc; }, { roomName: 'N/A', roomNumber: 'N/A', storyName: 'N/A', spaceNumber:'N/A', spaceName: 'N/A' } );Pero de alguna manera, no puedo mostrar la información incluso si tengo espacios que contienen la matriz de objetos. Lo que estoy tratando de mostrar es que si no hay información, me gustaría decir 'N/A' como opción predeterminada.
Estoy accediendo a la información anterior aquí
const identityData = [ { label: 'Room Number', value: multiSpaceIdentityInformation.roomNumber }, { label: 'Room Name', value: multiSpaceIdentityInformation.roomName }, { label: 'Level', value: multiSpaceIdentityInformation.storyName }, { label: 'Space Number', value: multiSpaceIdentityInformation.spaceNumber }, { label: 'Space Name', value: multiSpaceIdentityInformation.spaceName } ];¿Podría alguien decirme dónde va mal con el código anterior? ¡Muchas gracias de antemano!
Entrada de muestra
{ "Spaces": [ { "spaceGeometry":{ "roomName": "" "roomNumber": "", "number": "number1" "name": "space1" }, "buildingStory":{ "name": "story1" } }, { "spaceGeometry":{ "roomName": "" "roomNumber": "", "number": "number2" "name": "space2" }, "buildingStory":{ "name": "story2" } }, ] }y la salida deseada sea como
multiSpaceIdentityInformation.roomName = "N/A" multiSpaceIdentityInformation.roomNumber = "N/A" multiSpaceIdentityInformation.storyName = "story1, story2" multiSpaceIdentityInformation.spaceNumber = "number1, number2" multiSpaceIdentityInformation.spaceName = "space1, space2"El segundo parámetro de reduce() es el valor inicial, por lo que "N/A" se representará siempre que los spaces sean una matriz. Esto es lo que haría:
const appendData = (initialValue, newValue) => { if(!newValue) return initialValue; if(!initialValue || initialValue === '') return newValue; return `${initialValue}, ${newValue}`; } const multiSpaceIdentityInformation = spaces?.reduce( (acc, space) => ({ roomName: appendData(acc.roomName, space.spaceIdentity.roomName), roomNumber: appendData(acc.roomNumber, space.spaceIdentity.roomNumber), storyName: appendData(acc.storyName, space.buildingStory?.name), spaceNumber: appendData(acc.spaceNumber, space.spaceIdentity.number), spaceName: appendData(acc.spaceName, space.spaceIdentity.name) }), { roomName: '', roomNumber: '', storyName: '', spaceNumber:'', spaceName: '' } ); Object.keys(multiSpaceIdentityInformation).forEach((key) => { if(multiSpaceIdentityInformation[key] === '') multiSpaceIdentityInformation[key] = 'N/A'; });