let data = [{ system: { id: "4gSSbjCFEorYXqrgDIP2FA", type: "Entry", name: "User" }, DataDetails: { shortOption: { "en-us": "some value" }, mediaFile: [{ sys: { type: "Link", link: "Entry", id: "7kRzyt4PFo", }, }, { sys: { type: "Link", link: "Entry", id: "2OspeCtNK0s", }, }, ], mediaGalary: [{ sys: { type: "Link", link: "Asset", id: "gHcw3Z1Ko", }, }, { sys: { type: "Link", linkType: "Asset", id: "h2cPiuU9jIz", }, }, ], mediaExplore: [{ sys: { type: "Link", link: "Asset", id: "euwcbds3282", }, }, { sys: { type: "Link", linkType: "Asset", id: "jndsiw23912", }, }, ], singleMediaImage: { sys: { type: "Link", linkType: "Asset", id: "7kRzyt4PFo", }, }, }, }, { system: { id: "1aBOO8tu3lUsjtICuIbUM5", type: "Entry", name: "User" }, DataDetails: { short: { "en-us": "details of shorts" }, shortSlugOption: { "hi-In": "options" }, booleanField: { kl: "true" }, }, }, { system: { id: "2pOUGnI1oRD7nsrYs600HA", type: "Entry", name: "Dummy" }, DataDetails: { testingNewValue: [{ sys: { type: "Link", link: "Entry", id: "66rzYr2BpWL", }, }, { sys: { type: "Link", link: "Entry", id: "1VTBHdLTdSW", }, }, ], }, }, { system: { id: "66rzYr2BpWL1VTBHdLTdSW", type: "Entry", name: "new" }, DataDetails: { oneReference: { sys: { type: "Link", linkType: "Asset", id: "h2cPiuU9jIz", }, }, multiReference: [{ sys: { type: "Link", link: "Asset", id: "gHcw3Z1Ko", }, }, { sys: { type: "Link", link: "Asset", id: "h2cPiuU9jIz", }, }, ], }, }, { system: { id: "cIb5mqEBRWDD6hrNmFmFE", type: "Entry", name: "new" }, DataDetails: { testingNewValue: { "hi-IN": "jksdsdo" } }, }, { system: { id: "7kRzyt4PFrX13gHcw3Z1Ko", type: "Entry", name: "Dummy" }, DataDetails: { testingNewValue: { "en-us": "kknksdo" } }, }, ]; let anotherObj = { "gHcw3Z1Ko": { status: true, tag: [], filename: "exute-image.jpg", is_dir: false, parent_uid: null, }, "h2cPiuU9jIz": { status: true, tag: [], filename: "wallpapers-6.jpg", is_dir: false, parent_uid: null, }, "7kRzyt4PFo": { status: true, tag: [], filename: "in-space-rk.jpg", is_dir: false, parent_uid: null, }, "euwcbds3282": { status: true, tag: [], filename: "justice-league.jpg", is_dir: false, parent_uid: null, }, "jndsiw23912": { status: true, tag: [], filename: "batman.jpg", is_dir: false, parent_uid: null, }, }; let res = data.reduce((acc, curr) => { if (!acc[curr.system.name]) { acc[curr.system.name] = {}; } let detailsObj = {}; let assetArray=[]; for (let key of Object.keys(curr.DataDetails)) { detailsObj[key] = Object.values(curr.DataDetails[key])[0]; if (typeof Object.values(curr.DataDetails[key])[0] === "object") { Object.values(curr.DataDetails[key]).map((type) => { if (Array.isArray(type)) { type.map((link) => { if (link.sys.link === "Asset") { for (let id in anotherObj) { if (link.sys.id === id) { assetArray.push(anotherObj[id]); detailsObj[key] = assetArray; } } } }); } else { if (type.sys !== undefined) { // for single Asset if (type.sys.link === "Asset") { for (let id in anotherObj) { if (type.sys.id === id) { detailsObj[key] = [anotherObj[id]]; } } } } } }); } } acc[curr.system.name][curr.system.id] = { title: curr.system.id, uid: curr.system.id, url: `/${curr.system.name}/${curr.system.id}`, ...detailsObj, }; return acc; }, {}); console.log(res);Estoy tratando de poner dos datos de objetos en una salida, pero al leer el enlace que es Activo
pero en la lista de matrices múltiples, la salida se muestra como salida de activo único, ya que mediaFile contiene dos entradas, pero no sé dónde estoy haciendo mal y me muestra un valor único
ya que mi propósito principal es reemplazar sys:{id:erfrdvsdf} por los datos clave de anotherObj
entonces debería verse así, por ejemplo, mi salida es así
"User": { "4gSSbjCFEorYXqrgDIP2FA": { "title": "4gSSbjCFEorYXqrgDIP2FA", "uid": "4gSSbjCFEorYXqrgDIP2FA", "url": "/User/4gSSbjCFEorYXqrgDIP2FA", "shortOption": "some value", "mediaFile": { "sys": { "type": "Link", "link": "Entry", "id": "7kRzyt4PFo" } }, "mediaGalary": [ { /**id:7**/ "status": true, "tag": [], "filename": "in-space-rk.jpg", "is_dir": false, "parent_uid": null } ], "singleMediaImage": { "type": "Link", "linkType": "Asset", "id": "h2cPiuU9jIz" } }, },pero debería ser así
"User": { "4gSSbjCFEorYXqrgDIP2FA": { "title": "4gSSbjCFEorYXqrgDIP2FA", "uid": "4gSSbjCFEorYXqrgDIP2FA", "url": "/User/4gSSbjCFEorYXqrgDIP2FA", "shortOption": "some value", "mediaFile": { "sys": { "type": "Link", "link": "Entry", "id": "7kRzyt4PFo" } }, "mediaGalary": [ { "status": true, "tag": [], "filename": "in-space-rk.jpg", "is_dir": false, "parent_uid": null }, { "status": true, "tag": [], "filename": "wallpapers-6.jpg", "is_dir": false, "parent_uid": null }, ], "mediaExplore": [ { "status": true, "tag": [], "filename": "justice-league", "is_dir": false, "parent_uid": null }, { "status": true, "tag": [], "filename": "batman.jpg", "is_dir": false, "parent_uid": null }, ], "singleMediaImage": [ { "status": true, "tag": [], "filename": "wallpapers-6.jpg", "is_dir": false, "parent_uid": null }, ] }, },pero mi salida esperada es lo que estoy buscando
Debido a esto, estoy atascado con el campo de entrada porque tengo el mismo problema que tengo con el campo de entrada, ya que escribí el mismo código para obtener los campos de entrada que están en Array y para el campo de entrada única.
donde se rompio mi codigo no lo se
Sé que este es un código largo, pero ayúdame a resolver este error ya que debido a esto no voy a avanzar.
Te faltan algunos valores porque no verificas linkType . Sus bucles sys.link pero no sys.linkType .
Utilizar:
link.sys.link === 'Asset' || link.sys.linkType === 'Asset'y
type.sys.link === 'Asset' || type.sys.linkType === 'Asset' Además, esta línea anulará su matriz: detailsObj[key] = [anotherObj[id]];
Reemplázalo con:
assetArray.push(anotherObj[id]); detailsObj[key] = assetArray;Para ser claros, este código no es bueno. Algunas sugerencias:
for (let id in anotherObj) { ... } , coloque la lógica dentro de una función llamada findAssetData )Array.prototype.forEach y Array.prototype.map (el uso del mapa en este código es incorrecto)