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

202
Vistas
Cómo obtener un valor único y un nombre de valor de un archivo JSON sin conocer el nombre del valor

Tengo un bot de discordia y guarda los logros en un archivo JSON. La estructura JSON es así:

 { "784095768305729566": { "coins": 14598, "achievements": { "taking_inventory": true } }, }

El comando debería darle una visión general de los logros que ya tiene.

Quiero crear una incrustación y ejecutar un bucle for para cada elemento secundario de los logros. Si el valor es true , el ciclo for debe tomar el nombre del valor y el valor y agregar un campo a la inserción donde el título del campo es el nombre del valor.

Ahí tengo varios problemas.

  1. No sé cómo obtener nombres de valores y valores. Ya probé Object.keys(...) pero eso da todas las claves y no una por una. No se como sacar los valores.
  2. No sé cómo hacer que el bucle for sea tan largo como todas las subcosas de los achievements .

Lo intenté:

 for(var i = 0; i<datafile[id].achievements.length; i++){...}

pero eso no funcionó.

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Puede obtener una matriz de las entradas de un objeto (claves y valores) de Object.entries. Puede filtrar esa matriz para que el valor sea verdadero. Puede asignar el resultado a la clave. Esto le da una serie de claves de logros que tenían el valor "verdadero".

 const datafile = { "784095768305729566": { "coins": 14598, "achievements": { "taking_inventory": true, "other_achievement": false } }, }; const id = "784095768305729566"; const achievements = Object.entries(datafile[id].achievements) .filter(([k, v]) => v) .map(([k, v]) => k); // do something with achievements console.log(achievements);

about 4 years ago · Santiago Gelvez Denunciar

0

Puede usar Object.entries que devuelve una matriz de los pares [key, value] de propiedades enumerables con clave de cadena enumerables de un objeto determinado:

 let user = "784095768305729566" let obj = { "784095768305729566": { "coins": 14598, "achievements": { "taking_inventory": true, "another_achievement": true, "yet_another_achievement": false, "and_one_more": true, } }, } let fields = Object.entries(obj[user].achievements) .map(([name, value]) => ({ name, value: value ? '✅' : '❌', inline: false, })) console.log(fields) // or if you only want to include achievements a user already has let onlyTruthyFields = Object.entries(obj[user].achievements) // only where value is truthy .filter(([name, value]) => value) .map(([name, value]) => ({ name, value: '✅', inline: false, })) console.log(onlyTruthyFields)

Y luego simplemente agregue estos a su inserción:

 embed.addFields(fields)
about 4 years ago · Santiago Gelvez 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