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

186
Vistas
Ordenar objeto de objeto con función de ordenar y reducir

tengo un objeto como este

 //input let data={ "51": {"name": "text51"}, "54": {"name": "text54"}, "61": {"name": "text61"}, "64": {"name": "text64"}, "71": {"name": "text71"}, "74": {"name": "text74"}, "81": {"name": "text81"}, "84": {"name": "text84"} } /* targeted output { "51": {"name": "text51"}, "61": {"name": "text61"}, "71": {"name": "text71"}, "81": {"name": "text81"}, "54": {"name": "text54"}, "64": {"name": "text64"}, "74": {"name": "text74"}, "84": {"name": "text84"} } */

Lo clasifico según el dígito de las claves.

 new_key=Object.keys(data).sort((a, b)=>parseInt(a.slice(-1)) - parseInt(b.slice(-1))); //output is ---> ['51', '61', '71', '81', '54', '64', '74', '84']

Ahora quiero reorganizar la base del objeto en la salida anterior. (Yo lo hice)

 result=new_key.reduce((r, k) => { console.log(r); r[k] = data[k]; return r; }, {});

Cuando console.log(r) para cada iteración, obtuve esto:

ingrese la descripción de la imagen aquí

Mi pregunta es por qué cuando llegó la tecla 54 fue al medio del objeto en lugar de ir al final.

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

0

El orden de las claves de objeto no estaba garantizado anteriormente en JS. Ahora es. Pero así es como va a ser .

Lo que importa aquí es que para números enteros como claves, el orden será ascendente .

Para las claves de cadena, es el orden de inserción , que se puede probar agregando un carácter al número entero cada vez.

 let data={ "51": {"name": "text51"}, "54": {"name": "text54"}, "61": {"name": "text61"}, "64": {"name": "text64"}, "71": {"name": "text71"}, "74": {"name": "text74"}, "81": {"name": "text81"}, "84": {"name": "text84"} }; let new_key=Object.keys(data).sort((a, b)=>parseInt(a.slice(-1)) - parseInt(b.slice(-1))); let result=new_key.reduce((r, k) => { console.log(r); r['x-' + k] = data[k]; return r; }, {});

about 4 years ago · Juan Pablo Isaza Denunciar

0

No puede definir su propia clasificación de claves de objeto, ya que el navegador (y las especificaciones de ES) tienden a realizar su propia clasificación.

Puede encontrar un montón de preguntas y respuestas en StackOverflow (un par de ejemplos: ES5 , ES6 )

Si realmente le importa el orden, le sugiero que use una matriz en su lugar.

about 4 years ago · Juan Pablo Isaza Denunciar

0

 console.log( Object.entries({ "51": {"name": "text51"}, "54": {"name": "text54"}, "61": {"name": "text61"}, "64": {"name": "text64"}, "71": {"name": "text71"}, "74": {"name": "text74"}, "81": {"name": "text81"}, "84": {"name": "text84"}, }).sort(([aKey], [bKey]) => { const aInt = parseInt(aKey.split('').reverse().join(''), 10); const bInt = parseInt(bKey.split('').reverse().join(''), 10); return aInt - bInt; }).reduce((result, [key, value]) => // - key insertion prescedence/order is guaranteed since ES6/ES2015. // // - but is does not apply for pure digit based keys. // - insertion of the latter is handled by an ascending key order. // // ... try ... Object.assign(result, { [key]: value }), {} // ... versus ... // Object.assign(result, { [`_${ key }`]: value }), {} ) ); console.log( Object.entries({ "51": {"name": "text51"}, "54": {"name": "text54"}, "61": {"name": "text61"}, "64": {"name": "text64"}, "71": {"name": "text71"}, "74": {"name": "text74"}, "81": {"name": "text81"}, "84": {"name": "text84"}, }).sort(([aKey], [bKey]) => { const aInt = parseInt(aKey.split('').reverse().join(''), 10); const bInt = parseInt(bKey.split('').reverse().join(''), 10); return aInt - bInt; }).reduce((result, [key, value]) => // - key insertion prescedence/order is guaranteed since ES6/ES2015. // // - but is does not apply for pure digit based keys. // - insertion of the latter is handled by an ascending key order. // // ... try ... // Object.assign(result, { [key]: value }), {} // ... versus ... Object.assign(result, { [`_${ key }`]: value }), {} ) );
 .as-console-wrapper { min-height: 100%!important; top: 0; }

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