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

190
Views
¿Cómo puedo pedir una tabla con números y letras decimales?

Hola estoy enfrentando un problema.

Quiero ordenar mi tabla por decimal y luego por letra.

Por ejemplo tengo esto:

 5.3 Choice 3 A-Choice 4 1.2 Choice 1 1.5 Choice 2 C-Choice 5

Y quiero que sea así:

 1.2 Choice 1 1.5 Choice 2 5.3 Choice 3 A-Choice 4 C-Choice 5

Probé algo así

 const compare = (a, b) => { if (!isNaN(b.label.charAt(0))) { if (a.label === b.label) { return 0 }; const aArr = a.label.split("."), bArr = b.label.split("."); for (let i = 0; i < Math.min(aArr.length, bArr.length); i++) { if (parseInt(aArr[i]) < parseInt(bArr[i])) { return -1 }; if (parseInt(aArr[i]) > parseInt(bArr[i])) { return 1 }; } if (aArr.length < bArr.length) { return -1 }; if (aArr.length > bArr.length) { return 1 }; return 0; } else { return a.label > b.label; } }; processus.sort(compare);

Pero no funciona... Gracias.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Pruebe la clasificación mediante la comparación de cadenas (ic localeCompare ).

localeCompare no es suficiente si los valores después de 'Choice' pueden ser > 9 (p. ej '1.2 Choice 23' . En ese caso, deberá ordenar dos veces, algo así como el fragmento.

 const toSort = getToSort(); log(`\n**Choice always [< 10], localeCompare sufficient`, toSort.simple .sort((a, b) => a.localeCompare(b)) .join(`\n`) ); // this does not work for a choice values > 9 log(`\n**Choice may be [> 9], localeCompare insufficient`, toSort.complex .sort((a, b) => a.localeCompare(b)) .join(`\n`) ); // so, [Choice > 9] needs more work // The plan: // 1. Sort on string start (eg '1.2', 'C'), create // an Object from that with key = string start, // values = [next values] and convert it to an // Array of entries; // 2. Sort numeric within the entries Array on the // last value ('Choice [value]'), which is already // converted to number. Remap the result to sorted // strings. const linesSorted = Object.entries(toSort.complex /*1*/ .map(v => v.split(/[\s-]/)) .sort(([a, , ], [b, , ]) => a.localeCompare(b)) .reduce( (acc, [v1, v2, v3]) => ({ ...acc, [v1]: [...(acc[v1] || []), [v2, +v3]]}), {} ) ) .reduce( (acc, [key, value]) => /*2*/ [...acc, [key, value.sort(([, a], [, b]) => a - b, [] ).map(v => `${key} ${v.join(` `)}`)]], []) .map(([, value]) => value.join(`\n`)) .join(`\n`); log(`\n**Choice may be [> 9], need more work`, linesSorted); // helpers function getToSort() { // return strings to sort, already splitted to array return { simple: `5.3 Choice 3 A-Choice 4 1.2 Choice 1 1.5 Choice 2 C-Choice 5`.split(`\n`).map(v => v.trim()), complex: `1.5 Choice 3 5.3 Choice 3 1.2 Choice 55 A-Choice 4 1.2 Choice 1 1.5 Choice 11 C-Choice 5 A-Choice 110 1.2 Choice 2`.split(`\n`).map(v => v.trim()) }; } function log(...strs) { const pre = document.querySelector(`pre`); strs.forEach(str => pre.textContent += `${str}\n`); }
 <pre></pre>

about 4 years ago · Juan Pablo Isaza Report

0

Esto se puede lograr fácilmente con localeCompare .

 const arr = [ '5.3 Choice 3', 'A-Choice 4', '1.2 Choice 1', '1.5 Choice 2', 'C-Choice 5', ]; const result = arr.sort((a, b) => a.localeCompare(b)); console.log(result);

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!