Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

87
Views
Establezca la matriz de cada objeto en su elemento de índice x

Entonces, tengo un objeto que contiene propiedades que son un objeto y (que contiene otros objetos hasta que ya no es un objeto) o una matriz de cadenas de texto de inglés y francés:

 let langs = { click : ["Click here", "Cliquez ici"], stat : ["Fonction status", "Status de la fonction"], no : ["Disabled", "Désactivé"], ping : { base : ["Pinging...", "Calcul du ping..."], result : ["Search complete, my latency is", "Recherche terminée, ma latence est de"] }, kick : { error : { msg: [ "I can't find this member, please check its writing or @!", "Je n'ai pas trouvé ce membre, veuillez vérifier son orthographe ou son @ !" ] } } }

Y el resultado que espero es:

 let langs = { click : "Click here", stat : "Fonction status", no : "Disabled", ping : { base : "Pinging...", result : "Search complete, my latency is" }, kick : { error : { msg : "I can't find this member, please check its writing or @!" } } }

Mi pregunta: ¿Hay alguna manera de copiar dinámicamente ese objeto para que mi salida sea exactamente la misma pero con las matrices solo como una cadena que sea el primer o el segundo elemento? Sé cómo establecer la propiedad de un objeto en (por ejemplo) el primer elemento

 let langs = { a : ["1","2"], b : ["3","4"] } Object.keys(langs).forEach(n =>{ langs[n] = langs[n][0] }) console.log(langs)

Pero el objeto "langs" no solo puede ser una matriz, sino también un objeto que contiene matrices u objetos que contienen objetos de matrices, etc. Sería increíble tener una función para esto.

 let langs = { a : ["1","2"], b : ["3","4"] }; langs = onlySelectIndexElement(langs,0) // Or 1 if I want the second element etc..
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Este es uno de esos casos en los que la biblioteca JSON incorporada hace que las cosas sean literales:

 let result = JSON.parse(JSON.stringify(langs, (key, value) => value instanceof Array ? value[0] : value ));

Y listo, hemos terminado. La razón por la que esto funciona es por el poco conocido segundo argumento de JSON.stringify , llamado función de reemplazo. Usamos eso para convertir cada matriz en "el primer elemento de esa matriz", y eso es todo lo que tenemos que hacer. JSON.stringify hace que el objeto recursivo real camine por nosotros.

about 4 years ago · Juan Pablo Isaza Report

0

Querrías una función recursiva para esto.

Mapa sobre las entradas. Si el valor es una matriz, devuelve el índice. De lo contrario, ejecute recursivamente el valor a través de la misma función.

 const onlySelectIndexElement = (obj, index) => Object.fromEntries( Object.entries(obj).map(([ key, val ]) => [ key, Array.isArray(val) ? val[index] : onlySelectIndexElement(val, index) ]) ) const langs = {"click":["Click here","Clique ici"],"stat":["Fonction status","Status de la fonction"],"no":["Disabled","Désactivé"],"ping":{"base":["Pinging...","Calcul du ping..."],"result":["Search complete, my latency is","Recherche terminée, ma latence est de"]},"kick":{"error":{"msg":["I can't find this member, please check its writing or @!","Je n'est pas trouvé ce membre, veuillez vérifier son écriture ou son @ !"]}}} console.log("en", onlySelectIndexElement(langs, 0)) console.log("fr", onlySelectIndexElement(langs, 1))
 .as-console-wrapper { max-height: 100% !important; }

about 4 years ago · Juan Pablo Isaza Report

0

Utilice una función recursiva que devuelva el primer elemento de la matriz cuando el valor sea una matriz; de lo contrario, devuelve un nuevo objeto donde los valores de propiedad son llamadas recursivas a la función.

 let langs = { click: ["Click here", "Clique ici"], stat: ["Fonction status", "Status de la fonction"], no: ["Disabled", "Désactivé"], ping: { base: ["Pinging...", "Calcul du ping..."], result: ["Search complete, my latency is", "Recherche terminée, ma latence est de"] }, kick: { error: { msg: [ "I can't find this member, please check its writing or @!", "Je n'est pas trouvé ce membre, veuillez vérifier son écriture ou son @ !" ] } } } function mycopy(obj) { if (Array.isArray(obj)) { return obj[0]; } return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, mycopy(value)])); } console.log(mycopy(langs));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!