JSFiddle - React, Tailwind, and code Playground
crealista from rangos
by abubelinha
HTML
LISTADO:<br><textarea id=listaorixinal rows=3 columns=2 style='border:1px solid blue;'>
</textarea>SEPARADOR:<input id=sep type=text value=','>
<button onclick="procesalista();">procesar</button>
<br>RESULTADO:<br>
</button>
<div id=divresultado style='border:1px solid red;'>
lista de rangos numéricos
</div>
JavaScript
var listaordenada=['12-15',12,13,14,'3-8'];
var sep=document.getElementById('sep').value;
document.getElementById('listaorixinal').value=listaordenada.join(sep);
function rango2lista(rango) {
var lista=[];
var rangos=rango.split('-');
var aviso=rangos.length + " RANGOS: "
+ JSON.stringify(rangos);
alert(aviso); //return(rango);
for(i=rangos[0];i<=rangos[1];i++) {
alert("RANGO "+i);
lista.push(i);
}
alert("RANGO en forma lista: "
+ JSON.stringify(lista));
return(lista);
}
function procesalista() {
var sep=document.getElementById('sep').value;
alert('separador: "'+sep+'"');
listaordenada=document.getElementById('listaorixinal').value.split(sep);
var actual=null,previo=null;
var rollo='';//listaordenada[0];
var novalista=[];
for(i=0;i<listaordenada.length;i++) {
if(listaordenada[i].indexOf('-')>=0) {
// o elemento da lista é un rango
alert(listaordenada[i]);
var sublista=rango2lista(listaordenada[i]);
for(subi=0;subi<sublista.length;subi++) {
novalista.push(parseInt(sublista[subi]));
}
} else {
// o elemento é un item individual
listaordenada[i]=parseInt(listaordenada[i]);
novalista.push(listaordenada[i]);
}
}
listaordenada=novalista;
listaordenada.sort(function (a,b) {
return a - b;
});
for(i=0;i<listaordenada.length;i++) {
if(i==0) {
rollo=listaordenada[i];
} else {
if(listaordenada[i]==listaordenada[i-1]+1) {
if(rollo[rollo.length-1]!='-')
rollo+='-';
} else {
rollo+=', '+listaordenada[i];
}
if(listaordenada[i]!=listaordenada[i+1]-1)
if(listaordenada[i]==listaordenada[i-1]+1)
rollo+=listaordenada[i];
}
}
rollo='<b>Rangos:</b> '+rollo+'<hr><b>Lista ordenada:</b> '+listaordenada.join(sep);
document.getElementById('divresultado').innerHTML=rollo;
}