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;
}