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

196
Vistas
Mejor manera de acceder a los atributos anidados en JavaScript

Tengo esta función en la que quiero acceder a los atributos anidados de los argumentos pasados dentro de la función.

 var objectsArr = [ {nestedobj:{property:'1'}}, {nestedobj:{property:'3'}}, {nestedobj:{property:'2'}}, {nestedobj:{property:'4'}} ]; function sortObjectsArr(objectsArray) { if (arguments.length == 2) { objectsArray.sort((a,b) => a[arguments[1]] - b[arguments[1]]); } if (arguments.length == 3) { objectsArray.sort((a,b) => a[arguments[1]][arguments[2]] - b[arguments[1]][arguments[2]]); } if (arguments.length == 4) { objectsArray.sort((a,b) => a[arguments[1]][arguments[2]][arguments[3]] - b[arguments[1]][arguments[2]][arguments[3]]); } //and so on and so forth } sortObjectsArr(objectsArr, 'nestedobj', 'property'); console.log(objectsArr);

¿Hay una forma más agradable de acceder a los atributos del objeto? en lugar de [arguments[1]][arguments[2]][arguments[3]].... ?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Entonces, primero tomaría los otros argumentos como un parámetro de descanso en lugar de usar la matriz de argumentos. Entonces definiría una pequeña función auxiliar.

 function sortObjectsArr(objectsArray, ...path) { objectsArray.sort((a, b) => getFromPath(a, path) - getFromPath(b, path)) } function getFromPath(obj, path) { let r = obj; path.forEach(key => { r = r[key]}) return r } let objectsArr = [ {nestedobj:{property:'1'}}, {nestedobj:{property:'3'}}, {nestedobj:{property:'2'}}, {nestedobj:{property:'4'}} ]; sortObjectsArr(objectsArr, 'nestedobj', 'property'); console.log(objectsArr);

Finalmente: evite usar var , use let en su lugar, es antiguo y se comporta de manera extraña (de formas que no esperaría). Pero explicar eso está fuera de esta respuesta, puede buscarlo en Google.

EDITAR: si quieres ser realmente genial, puedes usar la función de reducción:

 function getFromPath(obj, path) { return path.reduce((o, key) => o[key], obj) }

Si esto es más legible, debe decidir por sí mismo.

about 4 years ago · Juan Pablo Isaza 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