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

115
Vistas
Ordenar matriz de años (incluido BCE)

Hay una serie de objetos que contienen un elemento químico con su año de descubrimiento:

 [ {"name": "hydrogen", "discovered": "1766"}, {"name": "boron", "discovered": "1808"}, {"name": "copper", "discovered": "9000 BCE"}, {"name": "argon", "discovered": "1894"}, {"name": "iron", "discovered": "before 5000 BCE"}, {"name": "phosphorus", "discovered": "1669"} ]

Lo que quiero es ordenar la matriz en términos del año descubierto, por lo que el más antiguo (cobre en este caso) debe ser el primer elemento y el más reciente (argón) debe ser el último elemento.

 //It should look like this in the end: [ {"name": "copper", "discovered": "9000 BCE"}, {"name": "iron", "discovered": "before 5000 BCE"}, {"name": "phosphorus", "discovered": "1669"}, {"name": "hydrogen", "discovered": "1766"}, {"name": "boron", "discovered": "1808"}, {"name": "argon", "discovered": "1894"} ]

El problema que encontré fueron las pocas palabras clave como "antes", "BCE", "CE", que no sé cómo manejar.

¿Hay alguna solución para manejar este problema?

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

0

9000 BCE es lo mismo que el año -9000 .

Simplemente puede tratar esas cadenas de datos BCE (la palabra clave before podría ignorarse, porque contiene BCE de todos modos) como -year en la función de sort , de la siguiente manera:

 const data = [{name:"hydrogen",discovered:"1766"},{name:"boron",discovered:"1808"},{name:"copper",discovered:"9000 BCE"},{name:"argon",discovered:"1894"},{name:"iron",discovered:"before 5000 BCE"},{name:"phosphorus",discovered:"1669"}]; const res = data.sort((a, b) => { const numA = (a.discovered.includes("BCE") ? -1 : 1) * a.discovered.replace(/\D/g, '') const numB = (b.discovered.includes("BCE") ? -1 : 1) * b.discovered.replace(/\D/g, '') return numA - numB }) console.log(res)
 .as-console-wrapper { max-height: 100% !important; top: 0; } /* ignore this */

about 4 years ago · Juan Pablo Isaza Denunciar

0

Muy bien, primero debe crear una función que convierta las fechas a un formato común. En este ejemplo lo convertiré a un número relativo a 0 (año 0):

 const beforeRegExp = new RegExp('(before )\\d*( BCE)'); const bceRegExp = new RegExp('\\d*( BCE)'); function toCommonDateFormat(date) { if (beforeRegExp.test(date)) { return date.replace("before ", "").replace(" BCE", "") * -1 } else if (bceRegExp.test(date)) { return date.replace(" BCE", "") * -1 } else { return date * 1; } }

Ahora podemos usar esta función en una función de clasificación:

 function compareDates(firstDate, secondDate) { return toCommonDateFormat(firstDate) - toCommonDateFormat(secondDate); }

Y ahora, para unirlo todo:

 const list = [{ "name": "hydrogen", "discovered": "1766" }, { "name": "boron", "discovered": "1808" }, { "name": "copper", "discovered": "9000 BCE" }, { "name": "argon", "discovered": "1894" }, { "name": "iron", "discovered": "before 5000 BCE" }, { "name": "phosphorus", "discovered": "1669" } ] const beforeRegExp = new RegExp('(before )\\d*( BCE)'); const bceRegExp = new RegExp('\\d*( BCE)'); function toCommonDateFormat(date) { if (beforeRegExp.test(date)) { return date.replace("before ", "").replace(" BCE", "") * -1 } else if (bceRegExp.test(date)) { return date.replace(" BCE", "") * -1 } else { return date * 1; } } function compareDates(firstDate, secondDate) { return toCommonDateFormat(firstDate) - toCommonDateFormat(secondDate); } const orderedList = list.sort(function(firstItem, secondItem) { return compareDates(firstItem.discovered, secondItem.discovered); }); console.log(orderedList);

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