Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
encuentre la clave y reemplace el valor con ella en javascript / node js

 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.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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:

  • Divide tu código en unidades lógicas más pequeñas. No anide 5 niveles de bucles. Cree funciones que realicen operaciones pequeñas y asígneles el nombre correspondiente (por ejemplo, en lugar de hacer for (let id in anotherObj) { ... } , coloque la lógica dentro de una función llamada findAssetData )
  • Comprender la diferencia entre Array.prototype.forEach y Array.prototype.map (el uso del mapa en este código es incorrecto)
  • Use herramientas de calidad de código como eslint, le ayudará si es un principiante
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda